我想搜索我的表有一个名字列和一个姓氏列。我目前接受一个字段中的搜索字词,并将其与两个列进行比较,一次一个
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在“first_name”列中存储“Larry”,在“last_name”列中存储“Smith”。数据是干净的,没有额外的空间,搜索词被左右修剪。
编辑2:我今天早上试过罗伯特·布博的答案。他和我昨晚的运行非常相似。我不能解释,但今天上午它工作。我可以想到的唯一的区别是,昨晚我运行concat函数作为我的搜索查询的第三个“或”段(在通过first_name和last_name)。今天早上,我把它作为最后一个部分,看看上面的地址和商家名称。
在查询结束时运行mysql函数比在中间运行好吗?