贴代码
<?php
include 'sqlite.php';
$db = new sqliteDb('order.db');
//--------------------函数-------------------------//
$sql = "select uid,name,money,func(money) as cd from user order by cd desc";
$db->createFunction('func','format');
$ret = $db->getArray($sql);
print_r($ret);
function format($str)
{
return 'field='.$str;
}
exit;
//--------------------排序-------------------------//
//自定义比较函数
$sql = "select uid,name,money from user order by name COLLATE cmp ";
//name是要比较的字段名 COLLATE固定值 cmp定义的php标识
$db->createCollation('cmp','cmp');//第一个参数是sql中运用的标识,第二个参数是自定义的比较函数
$ret = $db->getArray($sql);
print_r($ret);
function cmp($f1,$f2)
{
$a1 = substr($f1,1);
$a2 = substr($f2,1);
$str = $a1.','.$a2."\n\n";
file_put_contents('./a.txt',$str,FILE_APPEND);
if($a1>$a2){
return -1;
}elseif($a1<$a2){
return 1;
}else{
return 0;
}
}
//--------------------聚合-------------------------//
$sql = 'select uid,name,agg(money) from user';
$db->createAggregate('agg','agg1','agg2');
$ret = $db->getArray($sql);
print_r($ret);
//这里agg1,agg2会调用两次,未深究。不过返回结果$ret是对的,只有一个
//$context用来遍历迭代各行指定字段的数据,$nums序号,$value每一次值入的字段值
function agg1(&$context,$nums,$value)
{
$context[] = $value;
// $str[] = [$context,$nums,$value];
// file_put_contents('./b.txt',json_encode($str)."\n\n",FILE_APPEND);
return $context;
}
//agg1调用完后会调用agg2,返回值作为sql中调用的结果,结果必须是字符串类型
function agg2($context){
// file_put_contents('./c.txt',json_encode($context)."\n\n",FILE_APPEND);
return array_sum($context);
}