【发布时间】:2016-11-03 14:31:36
【问题描述】:
如果我知道所有三个字段,则此查询可以完美运行。例如:Name1 Name2 Name3,甚至前两个或后两个名字。
SELECT
id, forename, middlename, surname
FROM peoples
WHERE
forename LIKE '%$search_keyword%' OR
middlename LIKE '%$search_keyword%' OR
surname LIKE '%$search_keyword%' OR
CONCAT(forename, ' ',middlename, ' ',surname) LIKE '%$search_keyword%' ORDER BY forename DESC LIMIT 50";
但是,如果我正在搜索相同的结果,但不知道所有名称,则它不起作用。
例如:Name1 Name3,给我 0 个结果。
例子:如果我输入John Lewis,但是这个的全名是John Shop Lewis,它一定会找到这个结果。
另外,人可能没有中间名,所以默认设置为空。
【问题讨论】:
-
它应该返回什么?您能否向我们展示您的数据库中的摘录?另外,您的
CONCAT中有一个错字:您写的是middlenames而不是middlename -
@roberto06 请检查更新的问题
-
请注意,没有 ORDER 的 LIMIT 相当毫无意义
-
由于名称有多种排列方式,将其分解并搜索名称的每个单独部分可能会更容易。
-
@aynber 有什么建议吗?我不认为爆炸将是这个的最佳解决方案