如何理解 CONCAT

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}%')";

的效果是一样的 明显上面的写法简单多了

阅读 2.4k
2 个回答

从原则上来说 LIKE % % 比较耗资源 本应该避免,更何况多字段的情况下。

如果一个结果集多个字段都要去查询那么就相当于对一个集合进行多次遍历 or ,

但是如果使用concat后就把多个列合并到一起 然后只需要查询一次。 但是 如果被concat的字段内容比较长的话 还是建议将那个字段独立出来 or 一下。如果都是少量数据则无所谓。

第一种要判断NULL,不然在mysql中如果有一列为NULL 那么那一行都会变成NULL导致意料之外的结果。

CONCAT(IFNULL(a.nickname,''),IFNULL(a.mobile,''), IFNULL(a.card_number,''))

clipboard.png

字符串函数,简单理解就行了,就是把多个字符串连在一起。
还有concat_ws,group_concat,查下资料就一目了然了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题