我正在開發一個基本的詞搜索應用與SQL和紅寶石,我有一個字母數組來找到可用的單詞。通過縮小哪些字母不在數組中,查詢更容易。例如。返回字符數爲?的行嗎?
alphabet= %w{a b c d e f g h i j k l m n o p q r s t u v w x y z}
available_letters = %w{p k z l p m t l n g g r u a r t n d z w a l m n e}
然後我就可以從字母表中減去,信件從我的搜索中排除,並用一個SQL查詢類似下面的結束。
select * from words
where word not like '%b%' and word not like '%c%' and word not like '%f%'.....
這給了我所有可用的單詞與所有可用字母的組合。它不會縮小字母出現的次數。所以如果我只有一個「E」,我希望查詢能夠縮小隻包含一個e的詞。我不確定這是否可以用sql查詢完成,或者我是否需要使用一個過程。任何人都知道解決這個問題的好方法嗎?
你有沒有想過創建一個 - 26列(我知道這聽起來很糟糕) - 表的字母數可用?然後,你所要做的就是:'SELECT * FROM words WHERE e = 1' - 這將是海拉更快的方式 –
我想你可以創建一個由word_id,letter_id,count ......填充的聯結表「填充的,p」的條目在計數列中將包含2,而「填充的,e」將具有1的計數(該字中的其他字符也是如此)。這樣的表格每個詞將有n個詞條,該詞中每個不同的字母都有一個詞條。 (填充將在交叉點/計數表中有8個條目)。 這將爲50K作品提供大約50萬個作品,每個作品平均包含10個不同的字符。聽起來有點醜陋,但它有效地交換了預計算和空間,以便進行快速標準化查找。 –