分享wellcms mysql数据查询干货

敲定吧2021-9-16 530

先来解析下 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种查询方法

  1. 精确查询,array('tid' => 1); 会精确匹配tid值
  2. IN查询 array('tid' => array('1','2','3')); 方法里tid值必须为数组
  3. LIKE 模糊查询 array('tid' => array('LIKE' => '1'))  方法里tid值必须为二维数组并且key为LIKE
  4. 若有同学不太明白 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()方法

其实冰哥一再强调尽量避免数据库做运算,这个有需要的人可以参考下,但可能会对性能有一定影响,若没达到百万级以上数据也无所谓啦!~~~

 

文中若有错误,请指出,共同进步!^_^

最新回复(3)
  • 敲定吧2021-9-16
    2
    忘了示例了,
    $cond = array('tid!' => array(1,2,3))
    写的方法tid后面多了个运算符!号,还可选<,>
    我也把值默认为数组,因为一开始设计是为了过滤id,值也支持单个使用,只是要加上个[ ]
  • 燃烧的冰2021-9-16
    3

    算是认真看了下部分代码。

    当你用到数据库运算的时候,说明业务逻辑出现了问题。不过几十万数据无所谓。

    $orderby 为 1 正序(升序) -1为倒序(降序)

    其实默认是支持!<>

    $cond = array(
        'tid' => array('>' => 10)
    );
  • 敲定吧2021-9-17
    4
    燃烧的冰 算是认真看了下部分代码。 当你用到数据库运算的时候,说明业务逻辑出现了问题。不过几十万数据无所谓。 $orderby 为 1 正序(升序) -1为倒序(降序) 其实默认是支持!&lt;& ...
    哈哈,我还是没认真看看,我再研究下业务逻辑,看看还有没有更好的方法,因为我现在涉及到了"拉黑用户",我会存储用户ID,在获取时进行过滤
返回
发新帖