2016-01-05 28 views
0

有點新來的MySQL,我正在創建一個遊戲,我的算法從其中包含英文字典的表中挑選一個單詞,用戶應該猜測可以從中導出的許多有效英文單詞那個詞。但是,我不希望每次用戶提交答案時都要搜索數據庫以檢查其有效性。所以我想要一種方法來查詢我的字典表,並檢索可以從根字母的字母形成的每個單詞,以便我將這些單詞存儲在應用程序中,並且每當用戶提交一個單詞時,我會從該列表中檢查以減少數據使用。Anagram求解器(最佳實踐)

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,使其工作,我會很高興有任何幫助的。謝謝。

回答

0

您應該在字典表上創建一個新列,然後運行算法以使用匹配數填充它。

運行期間所有這些「%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

+0

其不工作 –

+0

編輯我的帖子的鏈接:http://stackoverflow.com/questions/17285723/mysql-anagram-query-to-pull-every-possible-word-with-any-letters – Volpato

0

如果填充在表中的另一列有每個單詞的字母按字母順序排列,例如:

silent eilnst 
listen eilnst 

這可能是p當建立你的桌子時選擇一次。

然後,您可以查詢您的表格一次,以獲得所有與您的原始選擇具有完全相同的字母集的單詞。