一个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);