gpt4 book ai didi

mysql - 选择包含某些字符的MYSQL数据(单词)

转载 作者:行者123 更新时间:2023-11-29 09:38:32 28 4
gpt4 key购买 nike

我在 MYSQL 表中有一本字典,该表由 240 000 个单词组成。例如,如果我有字母 GIGSN> 和 O 我想选择表中包含所有或部分这些字母(并且没有其他字母)的所有单词。

可接受的词语包括:

  • 歌曲
  • 儿子
  • 所以
  • 开启

Not Acceptable 词语示例:

  • 歌曲(比允许的多 1 S)
  • 单词长度超过字符数(本例中为 6)

MYSQL 查询是什么样的?

我当前的 MYSQL 如下所示:

SELECT * FROM `list` 
WHERE word like '%S%' and word like '%O%' and word like '%G%'

我想使用 6 或 7 个字母并查找以下单词:

  • 同样长
  • 较短

现在我只能找到同样长或更长并且还包含其他字母的单词。

最佳答案

这是一个起点:

(我会坚持要求您根据所需的字母构建查询。)

如果该列只有一个单词:

WHERE word REGEXP '^[GISNO]+$'

如果该列可以有多个单词,这将选择行(但不是单词),然后在版本 8.0 之前:

WHERE word REGEXP '[[:<:]][GISNO]+[[:>:]]'

或者,8.0:

WHERE word REGEXP '\b[GISNO]+b'

现在过滤掉每个字母的“太多”。 (我假设这个词本身就在列中。)

  AND word NOT REGEXP 'G.*G.*G'   -- max of 2 Gs
AND word NOT REGEXP 'I.*I' -- max of 1 I
AND word NOT REGEXP 'O.*O' -- max of 1 O
AND word NOT REGEXP 'S.*S' -- max of 1 S

另一种方法是构建一个额外的列,其中字母按字母顺序排列。

going   ggino
song gnos
son nos
so os
on no
no no -- note the dup in the new column

现在测试变成了

WHERE sorted_word REGEXP '^g{0,2}i?n?o?s?$'

这应该运行得更快一些。

使用这个技巧,其他一些东西可能会运行得更快。

关于mysql - 选择包含某些字符的MYSQL数据(单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57123640/

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