国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQLite > 正文

SQLite研究——自定義函數

2024-09-07 00:10:02
字體:
來源:轉載
供稿:網友

SQLite是一個輕量級引擎,尤其在PHP中內置的2版本,并不帶有類似MySQL那樣的實用函數。

但是它提供了一套非常靈活的自定義函數方式。用戶可以將需要使用的功能,先用PHP函數實現,然后注冊到SQLite里面,就可以在SQL語句中使用了。

一個最簡單的例子:

function url2host($url) {

$parts = parse_url($url);

return "$parts[scheme]://$parts[host]";

}

// Tell SQLite to associate PHP function url2host( ) with the
// SQL function host( ). Say that host( ) will only take 1 argument.

sqlite_create_function($db, 'host', 'url2host', 1);

// Do the query
$r = sqlite_query($db, 'SELECT DISTINCT host(lower(url)) AS clean_host
FROM access_log ORDER BY clean_host;'
);

SQLite只支持Count,不支持Averag。所以類似功能也要寫函數實現。

因為需要對多項結果進行累加,注冊方式與普通函數注冊不同。注意:請嚴格按照格式進行書寫。看起來似乎很復雜,但是如果你用過array_walk,就會感覺到似曾相識了。

// average_step( ) is called on each row.
function average_step(&$existing_data, $new_data) {
$existing_data['total'] = $new_data;
$existing_data['count'] ;
}

// average_final( ) computes the average and returns it.
function average_final(&$existing_data) {
return $existing_data['total'] / $existing_data['count'];
}

//regist average , using average_step and average_final
sqlite_create_aggregate($db, 'average', 'average_step', 'average_final');

$r = sqlite_query($db, 'SELECT average(number) FROM numbers');

需要注意的是: SQLite對COUNT的語法支持與MySQL不同。

MySQL: select class, count(*) as cnt group by class where cnt > 3

SQLite: select class, count(*) as cnt group by class HAVING cnt >3

印象里面SQL2的規范方式就是這樣的,只是MySQL為了方便更靈活處理了而已。

另外,對于自定義函數,還有一點需要說明:

如果數據是二進制(比如圖象),需要進行解碼和編碼處理。因為函數是在SQLite內部運行的,二進制數據在SQLite內部是編碼存儲的。

$data = sqlite_udf_binary_decode($encoded_data);
.... .... //deal with $data
$result = sqlite_udf_binary_encode($return_value);

~~呵呵~~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博野县| 常山县| 郸城县| 十堰市| 祁连县| 资源县| 贡嘎县| 潮安县| 慈溪市| 兴义市| 盘山县| 江陵县| 栖霞市| 武功县| 兴和县| 宝应县| 南京市| 金溪县| 富锦市| 大城县| 台东县| 开江县| 洛宁县| 康保县| 金门县| 阿瓦提县| 陆良县| 永春县| 墨玉县| 平湖市| 卢氏县| 大名县| 交口县| 苍南县| 深州市| 旺苍县| 永嘉县| 紫金县| 蛟河市| 开阳县| 西乌珠穆沁旗|