我想搜索我的表,其中有一列名字和一列姓氏。我目前接受来自某个字段的搜索字词,并将其与两列进行比较,一次
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函数是否比在中间运行更好?
您所拥有的应该可以工作,但可以简化为:
select * from table where concat_ws(' ',first_name,last_name) like '%$search_term%';
您能否提供一个示例名称和搜索词,该方法不起作用?