resultats inattendus requete

Invité
Invité n'ayant pas de compte PHPfrance

20 juin 2007, 13:36

Bonjour à tous,

J'ai créé une requete pour rechercher un mot dans certains champs d'une table produits.
Par exemple rechercher le mot 'hozier' donne:
SELECT * FROM produits WHERE titreSousTitre LIKE '%hozier%' OR themes LIKE '%hozier%' OR auteur LIKE '%hozier%' OR motsClef LIKE '%hozier%'
ça fonctionne bien.

Pour chaque enregistrement, j'ai rajouté un champ 'trash' pour la corbeille, type tinyint(1) qui vaut 0 par défaut. Quand on met un produit dans la corbeille, son champ 'trash' passe de 0 à 1.

Mon problème:
J'essaye maintenant d'afficher les produits qui contiennent le mot 'hozier' et qui ne sont pas dans la corbeille (trash=0). ça me donne:
SELECT * FROM produits WHERE trash = 0 AND titreSousTitre LIKE '%hozier%' OR themes LIKE '%hozier%' OR auteur LIKE '%hozier%' OR motsClef LIKE '%hozier%'
pas d'erreur, mais j'ai des trash=1 dans mon résultat, alors que je ne le demande pas.

Pareil quand j'essaye :
SELECT * FROM produits WHERE  titreSousTitre LIKE '%hozier%' OR themes LIKE '%hozier%' OR auteur LIKE '%hozier%' OR motsClef LIKE '%hozier%'  AND trash = 0
pas d'erreur, mais j'ai des trash=1 dans mon résultat, alors que je ne le demande pas.

Qu'ai-je mal fait dans ma requete?

Mammouth du PHP | 19672 Messages

20 juin 2007, 13:40

Il manquerait une paire de parenthèses :

Code : Tout sélectionner

SELECT * FROM produits WHERE ( titreSousTitre LIKE '%hozier%' OR themes LIKE '%hozier%' OR auteur LIKE '%hozier%' OR motsClef LIKE '%hozier%' ) AND trash = 0
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: