sqlite3的sql语言中运用php函数,createFunction、createCollation、createAggregate

贴代码

<?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);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值