3 "AND" avec WHERE ?

Eléphanteau du PHP | 17 Messages

25 sept. 2006, 23:44

Bonjour,

Je suis débutant en SQL...
Je développe un moteur de recherche pas bien compliqué :

3 conditions :
- Catégorie
- Sous catégorie
- Département

Afin de limiter le nombre de résultats j'aurais souhaité pouvoir appliquer ces 3 conditions pour afficher les résultats correspondant...

Or : il me semble que plus d'un AND dans l'instruction SQL après WHERE sont impossible :

"SELECT * FROM assos WHERE categorie = 'valeur1' AND soucat = 'valeur2' AND departement = 'valeur3' ORDER BY 'departement' ASC"

Comment faire ??!

Merci à vous

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

25 sept. 2006, 23:53

Salut,
Pourquoi dis tu que :
plus d'un AND dans l'instruction SQL après WHERE sont impossible
:-k

C'est tout a fait possible... ce qui n'as pas de sens est de placer plusieurs AND qui portent sur un même champ mais dont le contenu devrait être différent, ex :

Code : Tout sélectionner

SELECT ... FROM ... WHERE champ = "machin" AND champ = "bidule"
puisqu'un champ ne peut contnir à la fois "machin" et "bidue"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Mammouth du PHP | 19672 Messages

26 sept. 2006, 08:06

Ce qu'il faut savoir, et c'est la logique même, c'est que plus tu rajoutes de conditions de tri, plus le résultat sera restreint. Il peut donc arriver que toutes les conditions ne puissent pas être réunies et que la requête ne retourne rien, ce qui ne signifie nullement une erreur.

Tu peux donc avoir des alternatives. Par exemple pour reprendre l'exemple de Truc :

Code : Tout sélectionner

SELECT ... FROM ... WHERE champ1 = "machin" AND (champ2 = "bidule" OR champ2 = "chose")
Notes bien les parenthèses : deux conditions doivent impérativement être vérifiées, mais la deuxième présente elle-même deux possibilités qui sont entre les parenthèses : donc la deuxième condition veut que "champ2" vale soit "bidule" soit "chose", mais pour l'un comme pour l'autre, "champ1" devra de toutes façons valoir "machin"
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: