if ( $nickname != '' ) {
$where .= " and CONCAT(a.nickname,a.mobile, a.card_number) like '%" . $nickname . "%'";
}
和
$where .= "and (a.nickname like '%{$nickname}%' or a.mobile like '%{$nickname}%' or a.card_number like '%{$nickname}%')";
的效果是一样的 明显上面的写法简单多了
从原则上来说 LIKE % % 比较耗资源 本应该避免,更何况多字段的情况下。
如果一个结果集多个字段都要去查询那么就相当于对一个集合进行多次遍历 or ,
但是如果使用concat后就把多个列合并到一起 然后只需要查询一次。 但是 如果被concat的字段内容比较长的话 还是建议将那个字段独立出来 or 一下。如果都是少量数据则无所谓。
第一种要判断NULL,不然在mysql中如果有一列为NULL 那么那一行都会变成NULL导致意料之外的结果。