Le problème ici est que vous vérifiez la présence de l
deux fois. C'est la même chose que... "Il contient un l
. Oui, contient toujours un l
." Il ne vérifie pas deux d'entre eux. Voici une alternative...
SELECT word FROM us_6 WHERE
word REGEXP 'v' AND
word REGEXP 'l.*l' AND
word REGEXP 'e' AND
word REGEXP 'o' AND
word REGEXP 'y'
Cela devrait correspondre à tous les mots contenant un v
, deux l
's, un e
, un o
, et un y
.
Ainsi, à chaque autre occurrence de la même lettre, ajoutez simplement une autre lettre .* à la requête. Par exemple, lullaby
nécessite la requête suivante :
SELECT word FROM us_7 WHERE
word REGEXP 'l.*l.*l' AND
word REGEXP 'u' AND
word REGEXP 'a' AND
word REGEXP 'b' AND
word REGEXP 'y'
Regarde comment j'ajoute 3 *.l
car il y a 3 occurrences de l
dans le mot lullaby
.
La même chose peut également être accomplie avec LIKE
au lieu de REGEXP
. Voici une requête équivalente à la question d'origine...
SELECT word FROM us_6 WHERE
word LIKE '%v%' AND
word LIKE '%l%l%' AND
word LIKE '%e%' AND
word LIKE '%o%' AND
word LIKE '%y%'