php - MySQL:查询搜索所有可能的单词

标签 php mysql sql

我有一个带有输入框的表单,用户可以在其中指定他们的姓名,名称可以是两个或多个单词,例如 John SmithJohn 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”。

参见the MySQL docs

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/

相关文章:

php - 使用 Yii 框架按年份进行比较

php - 表格的选定行及其 PHP 值

php - 在动态 PHP 到 XML 脚本中正确转义 &

sql - 在sql server中存储图像

java - 如何插入日期和时间对象? PHP mysql 错误

php - 如何使用 SQL 查找 MySQL 数据库中中文短语的长度?

mysql - 具有百万行的数据库表

mysql - 管理用户集

mysql - 在 mySQL 中寻找此 IF 语句的解决方案

sql - PL/SQL 中的并行性