国产探花免费观看_亚洲丰满少妇自慰呻吟_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);

~~呵呵~~

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 信阳市| 徐汇区| 上犹县| 瑞昌市| 铁岭县| 固镇县| 拜城县| 南京市| 平乡县| 扎鲁特旗| 阿拉善左旗| 保康县| 凤庆县| 贞丰县| 上思县| 禹城市| 故城县| 丹东市| 绥江县| 慈溪市| 平果县| 白城市| 平罗县| 泗洪县| 婺源县| 广昌县| 偃师市| 嘉祥县| 道孚县| 贞丰县| 临颍县| 通城县| 福建省| 菏泽市| 榆中县| 上犹县| 建阳市| 建阳市| 富阳市| 乡宁县| 双辽市|