Salut tout le monde,
J'ai besoin de l'aide de connaisseurs pour modifier une requete SQL un peu trop compliquée pour moi. La voici :
SELECT SQL_CALC_FOUND_ROWS *,f.nom AS nomfourn
FROM commandes AS c
LEFT JOIN employes AS e ON c.Emetteur=e.id_employe
LEFT JOIN fournisseurs AS f ON c.Fournisseur=f.id_fournisseur
LEFT JOIN consommables AS con ON con.fournisseur=f.id_fournisseur
LEFT JOIN categories AS cat ON cat.id_cat=con.categorie
WHERE 1
GROUP BY c.id_commande
ORDER BY CONCAT(IFNULL(CASE WHEN status=0 THEN 1 ELSE 2 END,"" ),IFNULL(envoye,"" )),`date de livraison`
DESC LIMIT 0,100
Elle marche très bien.
Voici ce que j'en ai compris :
Elle va chercher toutes les commandes dans la table"commandes",
récupère le nom de l'émetteur pour chaque commande en cherchant dans la liste des employes,
récupère le nom du fournisseur dans la table des fournisseurs,
récupère la liste des consommable auquel un fournisseur a accès,
récupère les catégories de chaque consommable,
Elle les regroupe et les trie selon un ordre qui convient.
Mon problème est que l'employé n'a accès qu'à un nombre restreint de familles de produits.
J'aimerais que la requête ne retourne que les commandes dans lesquelles il y a au moins un consommable qui appartient à une des familles auxquelles l'utilisateur à accès.
Pour définir les familles auxquelles appartient un consommable la table "rel_familles_conso" contient les champs id_conso et famille avec une ligne par couple conso/famille.
De même la table "rel_familles_employe" contient les champs id_employe et famille avec une ligne par couple employe/famille.
J'ai beaucoup de mal avec les jointures, et je ne vois pas de moyen simple de faire, si l'un d'entre vous peut éclairer ma lanterne, il en récoltera toute mon admiration.
Bref, merci d'avance pour votre aide.