Page 1 sur 1

multiples EREGI dans un requête SQL

Posté : 06 mars 2008, 13:20
par zest
Bonjour,

J'ai une requête de ce type:
$sql = "SELECT * FROM table WHERE champ1=2007 ORDER BY nom";
$req = mysql_query($sql, $cnx); 
while ($rslt = mysql_fetch_assoc($req)){
et ensuite je fais un test sur un autre champ2 la présence de certaines lettres:
if(eregi('J',$rslt['champ2']) || eregi('S',$rslt['champ2']) || eregi('V',$rslt['champ2'])){
....
....bla bla bla...
....
}
}// fin du while
Le champ2 est une chaîne pouvant aller de 1 à 3 caractères.
Pourrais-je intégrer directement la structure conditionelle 'if' dans ma requête SQL ?
Et est-ce mieux et/ou plus rapide ?

Posté : 06 mars 2008, 14:34
par d0m
salut,

regarde du coté de la clause LIKE SQL

Posté : 06 mars 2008, 15:54
par zest
En fait je reformule ma question: comment faire ce type de requête la plus conciseet rapide possible?
Pour LIKE je vois a peu près, mais la REGEX ???
Comment faire pour tester la présence de S, J, ou V exclusivement ?

Posté : 06 mars 2008, 16:29
par d0m
de la même manière que ton expression, avec des ou :

Code : Tout sélectionner

SELECT.... FROM... WHERE champ LIKE .... OR champ LIKE .... OR champ LIKE ....

Posté : 06 mars 2008, 19:03
par AB
Dans ton cas, utiliser une régex dans ta requête serait certainement plus rapide que plusieurs LIKE (à tester)
$sql = "SELECT * FROM table WHERE champ1=2007 AND champ2 REGEXP '.*[S|J|V]' ORDER BY nom";
EDIT ça serait bien d'indiquer un ordre descendant (DESC) ou ascendant(ASC) pour le tri sur le nom

Pour un ordre ascendant ça donnerait
$sql = "SELECT * FROM table WHERE champ1=2007 AND champ2 REGEXP '.*[S|J|V]' ORDER BY nom ASC";