当前位置:  开发笔记 > 编程语言 > 正文

在WHERE子句中使用mysql concat()?

如何解决《在WHERE子句中使用mysqlconcat()?》经验,为你挑选了2个好方法。

我想在我的桌子上搜索一列名字和一列姓氏.我目前接受来自字段的搜索字词,并将其与两列进行比较,一次一个

    select * from table where first_name like '%$search_term%' or 
    last_name like '%$search_term%';

这适用于单字搜索术语,但结果集包括名称为"Larry"的每个人.但是如果有人输入名字然后是空格,那么是姓氏,我想要一个更窄的搜索结果.我试过以下没有成功.

    select * from table where first_name like '%$search_term%' or last_name 
    like '%$search_term%' or concat_ws(' ',first_name,last_name) 
    like '%$search_term%';

有什么建议?

编辑: 我正在测试的名字是"拉里史密斯".db将"Larry"存储在"first_name"列中,将"Smith"存储在"last_name"列中.数据干净,没有多余空格,搜索项左右修剪.

编辑2: 今天早上我尝试了Robert Gamble的答案.他和我昨晚的比赛非常相似.我无法解释,但今天早上它有效.我能想到的唯一区别是,昨晚我将concat函数作为搜索查询的第三个"或"段运行(在查看first_name和last_name之后).今天早上,我查看了上面的内容以及地址和商家名称,将其作为最后一段.

在查询结束时运行mysql函数比在中间运行更好吗?



1> Robert Gambl..:

你有什么应该工作,但可以减少到:

select * from table where concat_ws(' ',first_name,last_name) 
like '%$search_term%';

你能提供一个示例名称和搜索术语吗?



2> Luc..:

请注意,搜索查询现在区分大小写.

使用时

SELECT * FROM table WHERE `first_name` LIKE '%$search_term%'

它将匹配"拉里"和"拉里".有了这个concat_ws,它会突然变得区分大小写!

可以使用以下查询修复此问题:

SELECT * FROM table WHERE UPPER(CONCAT_WS(' ', `first_name`, `last_name`) LIKE UPPER('%$search_term%')

编辑:请注意,这仅适用于非二进制元素.另见mynameispaulie的回答.


如果您正在连接整数字段,则区分大小写也可能是因为版本5.5之前的MySQL中的错误 - 请参阅[answer](http://stackoverflow.com/questions/6397156/why-concat-does-not-默认到默认的字符集,在MySQL的)
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有