[MySQL] Ajouter des col. à un résultat si une condition est satisfaite

Ajouter des col. à un résultat si une condition est satisfaite [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 17-05-2008 à 22:40:51    

J'ai 3 tables:  
orders (id, user_id, total, paid)
items (order_id, product_id, quantity)
products (id, description)
 
Mon but est de d'afficher un produit, ainsi que les commandes auquel il appartient. Et s'il ne fait partie d'aucune commande, et bien je veux quand même voir ses données.
 
Pour le moment je fais ça avec 2 requêtes: une qui fait un simple SELECT sur products avec WHERE id=id_du_produit. Et une seconde qui détermine si le produit appartient à une commande qui a été payée.
 
J'essaye de la réduire en seule requête, donc j'ai essayé avec LEFT JOIN qui marche bien, mais dès que je mets un WHERE orders.paid = 1, si le produit n'appartient à aucune commande payée, le résultat est un tableau vide. Or moi je veux qu'au minimum les colonnes du produit soient renvoyées, et si le produit appartient à au moins une commande payée, et bien les colonnes de ces commands soient jointes au résultat.
 
Est-ce que je cherche à faire est possible ou bien je dois rester avec mes 2 requêtes?

Reply

Marsh Posté le 17-05-2008 à 22:40:51   

Reply

Marsh Posté le 18-05-2008 à 01:48:52    

Salut !
 
place ton orders.paid dans ta jointure externe et non dans le where qui lui s'applique sur l'ensemble des résultat SUITE aux jointures)
 
ce qui ressemblerait vaguement à :
 
 

SELECT p.id,p.description,o.id,....
FROM products p
LEFT JOIN items i ON (p.product_id=i.product_id)
LEFT JOIN orders o ON (i.order_id=o.id AND o.paid=1)


Message édité par Profil supprimé le 18-05-2008 à 01:50:14
Reply

Marsh Posté le 18-05-2008 à 12:36:55    

Merci spike, je suis en train de tester, j'ai un petit souci car même si la commande est payée, order_id reste vide, je vais d'où ça peut venir.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed