requête à plusieurs conditions ( AND OR )

Eléphanteau du PHP | 18 Messages

14 sept. 2017, 09:48

bonjour à tous ,

j'ai une base produit , l'utilisateur peut effectuer une recherche en sélectionnant des champs de tri :

sur le login qui travail sur le produit ( le login s'occupe de plusieurs produit ) 1 choix possible )
sur le fournisseur du produit ( 1 choix possible )
et sur les collections des produit ( 3 choix possibles )

je rencontre donc un problème sur la requête avec les AND et OR ....

j'ai effectué plusieurs test , mais je n'arrive pas à obtenir le tri complet , cad :

choix login ok
choix fournisseur ok
choix 1,2 ou 3 collections ok

dès que je mélange login et fournisseur , ou collection et login cela ne fonctionne pas , du moins les resultat ne sont pas ce que j ai demandé .

voila le code et merci pour votre aide

Code : Tout sélectionner

$tri_login = ($result->tri_login); $fournisseur = ($result->tri_fournisseur); $tri_collection_client1 = ($result->tri_collection1); $tri_collection_client2 = ($result->tri_collection2); $tri_collection_client3 = ($result->tri_collection3); $resultats=$connexion->query("SELECT * FROM Produit WHERE login ='".$tri_login."' OR fournisseur ='".$fournisseur."' OR (collection_client = '".$tri_collection_client1."' OR collection_client = '".$tri_collection_client2."' OR collection_client = '".$tri_collection_client3."')"); $resultats->setFetchMode(PDO::FETCH_OBJ); while ( $donnees = $resultats->fetch() ) {

Mammouth du PHP | 1552 Messages

14 sept. 2017, 12:59

Il te faut utiliser des parenthèse pour prioritiser tes conditions

Je pense que dans le cas que tu décris il te faut ceci
SELECT * FROM Produit
WHERE
login ='".$tri_login."'
AND fournisseur ='".$fournisseur."'
AND (
collection_client = '".$tri_collection_client1."' OR
collection_client = '".$tri_collection_client2."' OR
collection_client = '".$tri_collection_client3."'
)

Tu peux aussi utiliser la clause IN
SELECT * FROM Produit
WHERE
login ='".$tri_login."'
AND fournisseur ='".$fournisseur."'
AND collection_client IN( '".$tri_collection_client1."', '".$tri_collection_client2."', '".$tri_collection_client3."')
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie