先来解析下 wellcms 传统的查询
比如:
well_thread_find($cond, $orderby, $page, $pagesize, $key, $col, $d);
$orderby 对应正倒序查询
官方给出两个条件 1为正序ASC 其它为倒序DESC
使用方法是为它赋值到key 比如array('tid' => 1 或 x)
$page 对应当前分页,它会在查询时与$pagesize进行计算,从第几条开始
$pagesize 对应当前分页,它会在查询时与$page进行计算,从第几条开始
$key 对应数组KEY的取值
比如我有数组 array( array('id' => 2, 'age' => 10), array('id' => 3, 'age' => 20) );
若查询时$key = 'age' 则输出
array( '10' => array('id' => 2, 'age' => 10), '20' => array('id' => 3, 'age' => 20) );
$col 对应SELECT 需要显示出来的字段
例:array('id' => 2, 'age' => 10, 'name' => '敲定吧', 'address' => '安徽');
若 $col = array('id', 'age'); 则输出 array('id' => 2, 'age' => 10);
$d 数据库主从分离用到
看到这里估计大家都能明白它们的含义了吧?下面重点介绍下$cond
$cond 查询条件,为数组方式 array();
官方给出3种查询方法
- 精确查询,array('tid' => 1); 会精确匹配tid值
- IN查询 array('tid' => array('1','2','3')); 方法里tid值必须为数组
- LIKE 模糊查询 array('tid' => array('LIKE' => '1')) 方法里tid值必须为二维数组并且key为LIKE
- 若有同学不太明白 IN,LIKE等,可自行百度
最近码字的时候,发现只有这三种查询有点满足不了需要,需要用到运算符,现在分享一个方案:
支持 != 不等于,>= 大于等于, <= 小于等于这三种,不过也足够了!若有需要一切参考图中
$c = ['<', '>', '!'];
// 查找方法 放进foreach
if(in_array($x = substr($k, -1, 1), $c) && isset($v[0])) {
$k = substr($k, 0, -1);
$s .= '(';
foreach ($v as $v1) {
$v1 = (is_int($v1) || is_float($v1)) ? $v1 : "'" . addslashes($v1) . "'";
$s .= "`$k`$x=$v1 AND ";
}
$s = substr($s, 0, -4);
$s .= ') AND ';
} elseif
打开文件: 根目录/xiunophp/db.func.php 查找db_cond_to_sqladd()方法
其实冰哥一再强调尽量避免数据库做运算,这个有需要的人可以参考下,但可能会对性能有一定影响,若没达到百万级以上数据也无所谓啦!~~~
文中若有错误,请指出,共同进步!^_^