2012-04-26 81 views
3

我有一個數據庫表,有很多很多的單詞和字符串。 (現在它有超過300K的條目,但它會增長。)什麼是最好的方式來獲得適合模式的那些值?可以說這張表是:MySQL - 獲取CVCV值的最佳方法?

apples 
oranges 
abba 
car 
real 
tipi 
riot 
tidy 

現在如何檢索只有模式CVCV(ConsonantVowelConsonantVowel)?或CVVC,LLLL(letter * 4)等?我可以只讓具有不同圖案的一列像這樣:

word: real 
patterns: LLLL,CVVC,LVVC,LVVL,LVLC,LLVC,LLLC,LVLL,CLLC,... 

和搜索與「SELECT * FROM表WHERE LIKE字$模式」的數據庫,但我在想,如果有更好的辦法?

回答

2

CVCV:

SELECT 'cara' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]'; 

真正

SELECT 'abba' REGEXP '[bcdfghjklmnpqrstvwxz][aeiouy][bcdfghjklmnpqrstvwxz][aeiouy]'; 

+1

+1只是沒有那麼多的搜索掃描。 :)如果你經常這樣做,你也可以預先計算每個模式類型並存儲它們。 – 2012-04-26 21:13:19

-2

如果你只想找比4個字母詞應該是相當簡單的用正則表達式條件做。例如,如果你不在乎什麼元音和輔音字母的順序是,那麼它就是這麼簡單:

SELECT * 
FROM yourTable 
WHERE yourField REGEXP '^[a-z]{4}$' 

這一切說的是發現開始,以4個字母A-Z結尾的單詞。

*** ***這僅適用於小寫字母使用這種模式,如果你擔心大寫字母您可以這樣做:

1) LOWER(yourField) REGEXP '^[a-z]{4}$' 

OR 

2) yourField REGEXP '^[a-zA-Z]{4}$' 

如果你想要類似這樣的東西,但不是我給你的東西,請閱讀正則表達式。這是一個不錯的初學者參考:http://dev.mysql.com/doc/refman/5.1/en/regexp.html

我建議你閱讀正則表達式,因爲它們在很多字符串操作實例中都非常強大和相當有用。

+0

這個問題非常清楚地表明,他們正在尋找各種元音和輔音的特定順序(如CVCV)。 – siride 2012-05-06 16:02:17

+0

@siride如果您注意到OP說「或CVVC,LLLL(letter * 4)等?」我的答案明確涵蓋了LLLL。這只是一個例子,但是他們提到了一個例子。 – jeschafe 2012-05-15 17:14:05