我有一个带有输入框的表单,用户可以在其中指定他们的姓名,名称可以是两个或多个单词,例如 John Smith
或John Michael Smith
.
我需要编写一个查询,该查询将返回包含提交名称中所有单词的记录。因此查询将返回包含所有这些名称单词但可以具有不同顺序的记录。
例如,如果搜索字符串为 John Michael Smith
,查询应该能够返回名称如 John Smith Michael
的记录。 , Michael Smith John
, Smith John Michael
或与所有这些词的其他组合。可以看出,仅返回名称字段中仍包含所有单词但可以具有不同顺序的记录。但是,它不应返回不包含名称部分的结果,例如 John Michael
不应返回,因为缺少 Smith
.
我不知道如何为我的这种要求编写查询。请帮忙。
更新
到目前为止提供的答案甚至返回匹配 John Michael
的记录还。我尝试了@Marco的答案, @abesto和 @Eddie .
问题仍然存在:(
最佳答案
您可以尝试全文搜索:
SELECT * FROM table WHERE MATCH (name)
AGAINST ('+part1 +part2 +part3' IN BOOLEAN MODE);
在此解决方案中,将在 PHP 中生成“+part1 +part2 +part3”。
mysql> select * from sof;
+--------------------+
| n |
+--------------------+
| John |
| Smith |
| Smith John |
| Smith John Michael |
| John |
+--------------------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM sof WHERE MATCH(n) AGAINST('+John +Smith +Michael' IN BOOLEAN MODE);
+--------------------+
| n |
+--------------------+
| Smith John Michael |
+--------------------+
1 row in set (0.00 sec)
关于php - MySQL:查询搜索所有可能的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7752400/