我想搜索我的表,其中包含一列名字和一列姓氏。我目前接受一个字段中的搜索词,并将其与两列进行比较,一次一个
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%';
有什么建议吗?
EDIT:我正在测试的名字是“Larry Smith”。数据库将“Larry”存储在“first_name”列中,将“Smith”存储在“last_name”列中。数据干净,没有多余的空格,并且搜索词被左右修剪。
EDIT 2:今天早上我尝试了罗伯特·甘布尔的答案。他的跑步和我昨晚跑步的非常相似。我无法解释,但今天早上它起作用了。我能想到的唯一区别是,昨晚我运行了 concat 函数作为搜索查询的第三个“或”段(在查看first_name和last_name之后)。今天早上,在查看了上面的内容以及地址和公司名称后,我将其作为最后一段运行。
在查询结束时运行 mysql 函数是否比在中间运行效果更好?
你所拥有的应该有效,但可以简化为:
select * from table where concat_ws(' ',first_name,last_name)
like '%$search_term%';
您能否提供一个不起作用的示例名称和搜索词?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)