thinkphp中模糊搜索

一个input对应多个条件,如userName 和用户真实姓true_name名两个字段,form是以get方式提交 条件是

where($search)

        $cons['search']=I('get.qe');

        $page = I('get.p', '1', 'int');
        $pageSize = 10;
        if ($page <= 0) {
            $page = 1;
        }

        $search['is_delete'] = 1;

        if(!empty($cons['search'])){
            $or['username'] = array('like','%'.trim($cons['search']).'%');
            $or['true_name'] = array('like','%'.trim($cons['search']).'%');
            $or['_logic'] = 'or';
            $search['_complex'] = $or;
        }

还有一种是在PHP 中sql拼接sql的方式

之所以用原生的sql拼接是因为需求中要在input中输入true_name和username进行模糊检索,而tableName表中的username存的是User表中的id值,不能直接通过上面的方法得检索的值,(用户输入的是username字符不是username对应的数字)所以要将用户输入的username转换成User表中对应的id,然后在tableName表中匹配对应的id数值进行检索

检索User表的方法如下

    /**
     * 用户名搜索
     */
    static public function name_matching($username)
    {
        if(empty($username)){
            return '';
        }

        $or['username'] = array('like', '%'.$username.'%'); //username
        $or['true_name'] = array('like', '%'.$username.'%');//真实姓名
        $or['_logic'] = 'or';
        $where['_complex'] = $or;

        $arr=M('user')->field('id')->where($where)->select();
        return implode(',',array_column($arr,'id')) ;

    }

在搜索的逻辑中code如下

  // 输入框搜索的标题或者作者的username或者作者真实姓名
            if(!empty($params['qe'])){

               $cons_title = urldecode(trim($params['qe'])); //标题

               $ids = UserService::name_matching(trim($params['qe'])); //作者username或者真实姓名

               $title = ' and title like  \'%'.$cons_title.'%\'';
               $username = " or create_user in ($ids) ";
            }

注意where条件外层用单引号'',以及%前的"\"转义的作用

$res_sql = "select id,title,browser,create_user,add_time from tableName where ".$where." order by".$orderBy." limit ".$pageSize*($page-1).",".$pageSize;
$res = M()->query($res_sql);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值