2012-04-26 80 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