MySQL - 获得CVCV值的最佳方法?

时间:2012-04-26 20:14:32

标签: php mysql pattern-matching

我有一个包含大量单词和字符串的数据库表。 (现在它有超过300K的条目,但它会增长。)只有那些符合模式的值的最佳方法是什么?让我们说这个表是:

apples
oranges
abba
car
real
tipi
riot
tidy

现在如何只检索模式CVCV(ConsonantVowelConsonantVowel)?还是CVVC,LLLL(字母* 4)等?我可以像这样制作一个具有不同模式的列:

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

用“SELECT * FROM table WHERE word LIKE $ pattern”搜索数据库,但我在想是否有更好的方法?

2 个答案:

答案 0 :(得分:2)

<强> CVCV:

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

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

答案 1 :(得分:-2)

如果你只是寻找4个字母的单词而不是那么应该对regexp条件相当简单。例如,如果你不关心元音和辅音的顺序是什么,那么它就像这样简单:

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

我建议你稍微阅读正则表达式,因为它们非常强大,并且在很多字符串操作实例中非常有用。