problème de WHERE dans une requete

VaN
Mammouth du PHP | 1107 Messages

20 juin 2006, 17:33

Bonjour à tous,

J'ai une table articles contenant... des articles. Ces articles sont différenciés par un id_categorie. Trois de mes categories portent l'id 5, 6 et 13.

J'aimerais extraire tous les articles de ces 3 categories, mais ma requete ne marche pas.
"SELECT *
						FROM articles
						WHERE id_categorie = '5'
						AND id_categorie = '6'
						AND id_categorie = '13'";
Mais lorsque je selectionne une seule categorie, cela marche très bien. La synthaxe de mes AND est fausse ?

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 juin 2006, 17:35

La synthaxe de mes AND est fausse ?
Oui.

On ne peut pas porter à la fois les numéros 5, 6 et 13.
Mais, 5 OU 6 OU 13.

donc... ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

20 juin 2006, 17:37

Si je comprend ta modélisation, un article appartient à 1 catégorie, non ?

Dans ta requete, tu veux les articles qui appartiennent à la catégorie 5 ET à la catégorie 6 ET à la catégorie 13 ... :roll: ;)

Pour obtenir la liste des articles appartennant à ces catégories, il faut que tu récupères les articles appartant à la catégorie 5 OU la catégorie 6 ou la catégorie 13

Il existe d'ailleurs une instruction SQL très pratique : IN()

Code : Tout sélectionner

SELECT * FROM articles WHERE id_categorie IN ('5', '6', '13')
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

20 juin 2006, 17:37

En outre, ton champ id_categorie semble être de type entier.
Ses valeurs n'ont donc pas besoin d'être délimitées par des apostrophes.

VaN
Mammouth du PHP | 1107 Messages

20 juin 2006, 17:55

effectivement, ça marche mieux comme ça : )

Erreur comprise.

et merci à albat pour la correction sur les simple quotes.

Petit nouveau ! | 9 Messages

21 juin 2006, 10:17

Bonjour,

Je me permet de répondre car j'ai le même problème.
Le soucis avec IN() c'est qu'il agit comme l'instruction OR sauf que la syntaxe est plus légère et que le temps de traitement est meilleur !

Visiblement la seule solution est de pratiquer le "tri" avec un langage de prog ... snourf moi qui pensait que MySQL allait me tirer de là :cry:

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

21 juin 2006, 10:24

En quoi cette méthode ne "te tire pas de là" ?

Petit nouveau ! | 9 Messages

21 juin 2006, 11:37

Elle ne me tire pas de devoir écrire mon tri en php ! Non pas que j'aime pas ça mais je dois avouer que je suis un peu partisan du moindre effort :oops: