optimiser une requete mysql


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

optimiser une requete mysql

Message le Jeu Jan 15, 2009 11:01

Salut,

J'ai une requete qui est un peu longue et je voulais savoir si on peut l'optimiser:

Exemple avec le mot "PILE" [4 lettres]
Je veux recuperer tous les mots dans ma table qui ont entre 3 et 5 lettres, composés seulement des lettres P, I, L et E

Voici ce que je fais:

SELECT mot FROM ma_table WHERE mot RLIKE '^[pile]{3,5}$' AND mot LIKE '%p%' AND mot LIKE '%i%' AND mot LIKE '%l%' AND mot LIKE '%e%'


Pensez vous qu'on peut mieux faire?

Merci


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Jan 15, 2009 11:30

salut,
connaissais pas RLIKE mais :

Code: Tout sélectionner
SELECT mot FROM ma_table WHERE mot RLIKE '^[pile]{3,5}$'


ne suffit pas ?


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Jan 15, 2009 11:37

julienr, le principe est de retrouver le mot PLIE (inversion de lettre) ou PILLE (lettre doublée) [bien que ce mot n'existe pas].

Je ne veux pas le mot POLE, ni EPEE, ce qui serait le ca si j'enleve la suite du RLIKE


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Jan 15, 2009 11:46

c relou à chaque fois les regex faut tatonner, mais là

[pile]{3,5} veut normalement dire ce que tu veux c'est à dire seulement composé de p, i, l, e au minimum 3 et au maximum 5 fois dans la chaine


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Message le Jeu Jan 15, 2009 13:00

chava2b a écrit:Je ne veux pas le mot POLE, ni EPEE, ce qui serait le ca si j'enleve la suite du RLIKE


tu risque pas de trouver pole vu qu'il n'y a pas de "o". Par contre epee c'est bon tu as dit que t'acceptais les répétitions de lettres, non?

Parcequ'a première vue c'est la regex de julien qu'il te faut (ou tout du moins le principe, je n'ai pas vérifié si elle fonctionnait)


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Jeu Jan 15, 2009 13:13

Code: Tout sélectionner
SELECT mot FROM ma_table WHERE mot RLIKE '^[p|i|l|e]{3,5}$'


Et un truc du genre ?


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Jan 15, 2009 13:46

oups, le mot "POLE" ne ressort effectivement pas, ca c'est bon

Par contre, il me faut au moins une fois toutes les lettres. Je ne veux pas EPEE dans l'exemple.


Sinon, le RLIKE '^[p|i|l|e]{3,5}$' est egal au RLIKE '^[pile]{3,5}$'


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Jan 15, 2009 14:07

et si ton mot de départ c'est "meet"

tu dois pouvoir accépter "meeter" ?


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Jan 15, 2009 14:14

Julienr, il y aurai une lettre de trop pour "meeter"

Pour meet, j'ai comme resultat: mete, mette, emet, met ...

Si je ne mets que le rlike, j'ai aussi comme resulats: mme, tete,... que je ne veux pas


RiPSO
WRInaute passionné
WRInaute passionné
 
Messages: 1591
Inscription: 4 Oct 2007

Message le Jeu Jan 15, 2009 14:18

j'ai enfin trouvé quelqu'un qui cherche a faire des fonctions aussi tordues que les miennes :lol:

je serais bien curieux de savoir a quoi cette fonction va te servir :)


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Jan 15, 2009 14:23

RiPSO, c'est pour un moteur de recherche; C'est pour suggerer d'autres mots dans le cas où tu doubles une lettre ou bien que t'en inverses une.


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Jan 15, 2009 14:28

ca porte un nom çà et il me semble même que php propose une implémentation


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Jeu Jan 15, 2009 15:07

chava2b a écrit:oups, le mot "POLE" ne ressort effectivement pas, ca c'est bon

Par contre, il me faut au moins une fois toutes les lettres. Je ne veux pas EPEE dans l'exemple.


Sinon, le RLIKE '^[p|i|l|e]{3,5}$' est egal au RLIKE '^[pile]{3,5}$'


A mon avis tu vas avoir du mal à trouver des mots de 3 lettres qui contiennet au moins une fois les 4 lettres du mot de départ :roll:


chava2b
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 263
Inscription: 5 Déc 2003

Message le Jeu Jan 15, 2009 15:26

HawkEye, c'est vrai que pour un petit mot ce n'est pas parfois pas appreciable, ca fontionne mieux pour des mots un peu plus longs


julienr
WRInaute impliqué
WRInaute impliqué
 
Messages: 913
Inscription: 5 Aoû 2003

Message le Jeu Jan 15, 2009 16:25

ok mais bon il semble pas que ta requête du départ réponde à cette contrainte

Code: Tout sélectionner
SELECT mot FROM ma_table WHERE mot RLIKE '^[pile]{3,5}$' AND mot LIKE '%p%' AND mot LIKE '%i%' AND mot LIKE '%l%' AND mot LIKE '%e%'

optimiser une requete mysql

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité