Join + résultats non compris

Eléphanteau du PHP | 11 Messages

22 déc. 2010, 20:18

Bonjour,

Nouveaux petit soucis avec une requête...

Deux tables
products [id, cat, name-fr, hidden, et d'autres...], table de produits avec diverses infos
homeslider-blocs [id-bloc, fk-id, display, position, diff-img, etc...], table de différents blocs (d'un slider), rattachés à des produits a priori existants dans product.

Pour afficher mon slider, j'utilise donc un JOIN qui récupère les infos que je veux des deux tables. Parfait.
Mais dans mon back-office, j'utilise une requête semblable (JOIN), qui me liste tous les éléments de homeslider-blocs :
SELECT s.`id-bloc`, s.`fk-id`, p.`id`, s.`display`, s.`position`, s.`diff-img`, s.`alt-desc-fr`, s.`alt-desc-en`, s.`alt-desc-ru`, p.`cat`, p.`name-fr`, p.`hidden` FROM `homeslider-blocs` s JOIN `products` p ON s.`fk-id` = p.`id` ORDER BY s.`position` ASC
Jusqu'ici aucun problème.
Si l'on supprime un produit depuis le back-office, celui-ci cherche également dans homeslider-blocs et change la valeur de fk-id pour "-1" si un bloc était associé au produit à supprimer. Je ne veux pas simplement supprimé la ligne du bloc associé, mais bien le gardé en tant que bloc n'étant plus associé à aucun produit.

Sauf que ma requête JOIN ignore, du coup, ce bloc donc la fk-id n'est associable à aucun produit !

Comment puis-je faire pour garder exactement le même résultat que cette requête (à savoir lister les lignes de homeslider-blocs et récupérer les infos des produits correspondant à fk-id), ET lister également les lignes donc la fk-id n'est pas associables (avec des valeurs vides pour p.`name-fr` par exemple, du moment que c'est en une seule requête) ?

Merci ! :merci:

Eléphant du PHP | 245 Messages

23 déc. 2010, 13:23

Et en changeant le 'join' en 'left join',ça marcherait pas par hasard?

C'est peut être un peu plus compliqué que ça (quoi que pas sur) mais c'est du coté du "left join" qu'il faut que tu regardes à mon avis.

Eléphanteau du PHP | 11 Messages

23 déc. 2010, 18:31

En même temps si on l'sais pas ! :D

Merci beaucoup, parfait !