【问题标题】:Anagram solver(best practice)字谜求解器(最佳实践)
【发布时间】:2016-01-05 22:25:04
【问题描述】:

对 mysql 有点陌生,我正在创建一个游戏,我的算法从包含英语词典的表中选择一个单词,并且用户应该猜测可以从该单词派生的尽可能多的有效英语单词。但是,我不想每次用户提交答案以检查其有效性时都搜索数据库。所以我想要一种方法来查询我的字典表并检索可以从根单词的字母组成的每个单词,以便我将这些单词存储在应用程序中,并且每当用户提交一个单词时,我都会从该列表中检查以减少数据使用.

E.g root word:contaminate
submissions: eat is valid so will show in the generated list
         mind is invalid because 'd' is not in root word so won't show in query results.

如果有办法只用一个查询来做到这一点,或者必须添加 php 以使其工作,我将很高兴得到任何帮助。谢谢。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您应该在字典表上创建一个新列,然后运行一个算法来填充匹配的数量。

    所有这些“%like%”在运行时的查询都会有极低的性能,但如果你预先计算这个字段,事情几乎是立竿见影的。

    我不知道如何使用单个查询来执行此操作,您需要将单词拆分为更小的单词,然后根据字典表进行查询。

    例如:

    like '%contaminate%' 
    like '%contaminat%'
    like '%contamina%'
    like '%contamin%'
    ...
    like '%ontaminate%'
    like '%ntaminate%'
    like '%taminate%'
    ...
    like '%ont%'
    like '%ami%'
    like '%nat%'
    ...
    

    编辑:(对不起,我误解了你的问题)

    见:mysql: Anagram query to pull every possible word with any letters

    【讨论】:

    【解决方案2】:

    如果您使用按字母顺序排列的每个单词的字母填充表格中的另一列,例如:

    silent eilnst
    listen eilnst
    

    这可以在构建表格时填充一次。

    然后,您可以查询您的表一次,以获取与您最初选择的字母集完全相同的所有单词。

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 2010-11-10
      • 1970-01-01
      • 2021-05-07
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多