gpt4 book ai didi

php - SQL:查询以搜索所有可能的词

转载 作者:行者123 更新时间:2023-11-29 01:45:33 26 4
gpt4 key购买 nike

我有一个带有输入框的表单,用户可以在其中指定他们的姓名,姓名可以是两个或多个单词,例如 John SmithJohn Michael Smith

我必须编写一个查询,返回包含所显示名称中所有单词的记录。因此查询将返回具有所有这些词的名称的记录,但可能具有不同的顺序。

例如,如果搜索字符串是 John Michael Smith,则查询应该能够返回名称为 Michael John SmithMichael Smith John 的记录John Smith Michael 或所有这些词的某种组合。可以看出,只返回名称字段中仍然包含所有单词的记录,但可能具有不同的顺序。但是,它应该返回不包含部分姓名的结果,例如,不应返回 John Michael,因为其中没有 Smith

我试过这样的查询:

SELECT id, name FROM users WHERE
name LIKE '%Michael%' &&
name LIKE '%Smith%' &&
name LIKE '%John%'

同样的问题发生在:

SELECT * FROM users WHERE MATCH (name)
AGAINST ('+Michael +Smith +John' IN BOOLEAN MODE);

这两个查询还返回 John Michael 而不是包含所有三个词的记录:(

我不知道如何编写对需求的查询,所以我有。请帮忙。

最佳答案

使用 fulltext index .这是最简单/最快捷的方法。否则你将无法解析你的搜索字符串,转换

John Michael Smith

进入

SELECT ... WHERE (name LIKE '%John%') OR (name LIKE '%Michael%') OR (name LIKE '%Smith%')

这很快就会变得很痛苦,而且执行起来会很慢,因为 LIKE %..% 搜索不能使用索引。

请注意,全文索引目前仅限于 MyISAM 表,因此如果您使用的是 InnoDB,则必须使用变通方法(MyISAM 格式的并行表来保存带有触发器的可搜索数据,以保持两个副本同步)。显然,InnoDB 的全文最终在开发管道中,但它还没有出现。

关于php - SQL:查询以搜索所有可能的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7757437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com