一尘不染

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

mysql

我想搜索我的表,其中有一列名字和一列姓氏。我目前接受来自某个字段的搜索字词,并将其与两列进行比较,一次

    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%';

有什么建议吗?

编辑: 我正在测试的名称是“拉里·史密斯”。数据库将“ Larry”存储在“ first_name”列中,将“ Smith”存储在“
last_name”列中。数据干净,没有多余的空格,并且搜索词被左右修剪。

编辑2:
今天早上,我尝试了罗伯特·甘布尔的答案。他和我昨晚的跑步非常相似。我无法解释,但今天上午它奏效了。我能想到的唯一区别是,昨晚我在搜索查询的第三个“或”段中运行了concat函数(在查看了first_name和last_name之后)。今天上午,在浏览完上述内容以及地址和公司名称后,我将其作为最后一部分运行。

在查询末尾运行mysql函数是否比在中间运行更好?


阅读 1402

收藏
2020-05-17

共1个答案

一尘不染

您所拥有的应该可以工作,但可以简化为:

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

您能否提供一个示例名称和搜索词,该方法不起作用?

2020-05-17