Bonjour.
J’ai besoin d’aide SVP, pour une req SQL que je n’arrive pas à finir.
Je souhaite lister tous mes produits, et dans ce listage je souhaite afficher son stock pour le magasin actif (magasin actif = magasin sur lequel est loggé l’User).
J’ai 3 tables :
shops : contient tous les magasins (pour le moment, il y en a 2).
products : contient tous les produits.
product__shop : c’est la table pivot pour faire la relation Many to Many entre les magasins et les produits. Et dans cette table pivot j’ai bien sûr 2 colonnes pour les 2 clés étrangères, et j’ai aussi une colonne quantity_in_stock qui me sert à indiquer la quantité en stock de chaque produit pour chaque magasin.
Voici ma req SQL (dans cette exemple, je veux afficher tous mes produits + afficher leur stock WHERE le magasin actif qui a l’ID 1) :
SELECT `products`.*,
`product__shop`.`quantity_in_stock`
FROM `products`
LEFT JOIN `product__shop`
ON `products`.`id` = `product__shop`.`product_id`
WHERE `product__shop`.`shop_id` = 1
Cette req SQL m’affiche bien tous les produits qui ont leur stock renseigné dans la table pivot product__shop.
Mais dans mon application web, parfois des produits peuvent ne pas avoir leur stock renseigné dans cette table pivot (donc pas de ligne pour ce produit WHERE ce magasin). Et le problème, c’est que lorsqu’un produit n’a pas son stock renseigné dans la table pivot, le produit n’apparaît pas dans mon listage… Or je souhaite afficher tous les produits (de ma table products) y compris ce qui ne sont pas dans la table pivot product__shop WHERE se magasin actif.
Comment puis-je faire ceci SVP ?
Car avec ma req SQL actuelle, c’est normal que j’ai ce comportement, le WHERE product__shop
.shop_id
= 1 "transforme" mon LEFT JOIN en INNER JOIN, mais il doit bien y avoir une solution pour avoir le résultat que je souhaite ?
Merci d’avance.