gpt4 book ai didi

mysql - 使用 mysql 和 like 语句将完整单词与查询匹配

转载 作者:行者123 更新时间:2023-11-29 20:55:24 25 4
gpt4 key购买 nike

给定:表“people”和字符串“bob joe”

返回:“bob a joe”行,而不是 bobby joel 行。

name
'bob a joe'
'ana l lee'
'bobby joel'

我只想返回鲍勃·乔,而不是鲍比·乔尔:

SELECT name FROM people 
WHERE name Like '%bob%'
AND name like '%joe%';

此代码返回 bob 和 bobby 名称。我的数据库中的名称并不总是第一个最后一个,它们有时是最后一个第一个中间,因此“bob%”并不能解决问题。确实如此

SELECT name FROM people 
WHERE name LIKE '%bob %' OR name LIKE '% bob%'
AND name LIKE '%joe %' OR name LIKE '% joe%'

可以解决这个问题,但我正在寻找一个可能更简单或更好的解决方案

非常感谢会

最佳答案

如果您想使用like要以任何给定的顺序仅查找完整的单词,您必须写下所有 3 个变体,因为 start of a word 没有标志。在like 。所以你必须写下来

SELECT name FROM people 
WHERE (name LIKE 'bob %' OR name LIKE '% bob %' or name LIKE '% bob')
and (name LIKE 'joe %' OR name LIKE '% joe %' or name LIKE '% joe');

涵盖所有可能性(开始、中间和结束)。

查找完整单词的另一种(快速)可能性(除了将名称拆分为单独的列之外)是使用 fulltext search 。全文索引将允许您搜索最小长度为 innodb_ft_min_token_size 的完整单词。 (对于 InnoDB)和 ft_min_word_len (对于 MyISAM),您可以在配置文件中设置这些选项。 innodb 的默认值为 3,myisam 的默认值为 4,因此 'joe' 在 innodb 上就可以了。 (另一件事要记住:有一个停用词表,其中包含非常常见的英语单词,这些单词不会包含在索引中,例如“are”或“for”(全文索引通常用于索引完整句子而不是索引)只是名称)。您可以通过设置 stopwords options 来更改该表。

name 上添加全文索引-column(如果更改选项,则必须重新创建索引)。

create fulltext index idx_ft_people_name on people (name);

然后使用 match against查找单词

select * from people
where match(`name`) against ('+joe +bob' in boolean mode);

关于mysql - 使用 mysql 和 like 语句将完整单词与查询匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37680131/

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