Pb de jointure entre 4 tables

Fermé
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 - 17 nov. 2010 à 14:15
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 - 17 nov. 2010 à 19:31
Bonjour,

voila je tourne en rond depuis 2 jours sur un pb de jointures liant 4 tables. Tout va bien tant que je lui demande pas d'afficher un certain type de données.

voici ce que j'obtiens en visuel :

+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+
| ID stock | libelle pack | libelle produit | sérial | etat | Actif | ID cmd | stock_cmd | ID contenu |
+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+
| 19 | | Alim R | | eC | 1 | 7 | 19 | 19 |
-----------------------------------------------------------------------------------------------------------------
| 12 | pack+alim | R 128Mo |0-012 | eC | 1 | 7 | 20 | 20 |
-----------------------------------------------------------------------------------------------------------------
| 18 | pack+alim | Alim R | | eC | 1 | 7 | 20 | 20 |
-----------------------------------------------------------------------------------------------------------------
| 58 | | Boitier |0-001 | R | 0 | 12 | 27 | 27 |
-----------------------------------------------------------------------------------------------------------------
| 59 | | Boitier |0-002 | eC | 1 | 12 | 27 | 27 |
-----------------------------------------------------------------------------------------------------------------
| 60 | 1er ss pack | R 512Mo |0-019 | eC | 1 | 12 | 28 | 28 |
-----------------------------------------------------------------------------------------------------------------
| 34 | 1er ss pack | Alim R | | eC | 1 | 12 | 28 | 28 |
-----------------------------------------------------------------------------------------------------------------
| 57 | 1er ss pack | R 512Mo | 0-006 | R | 0 | 12 | 28 | 28 |
+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+ 


avec la requete suivante :

SELECT
stock_historique.actif, stock_historique.stock_id, stock_historique.stock_cmd,
stock.etat, stock.sn, stock.stock_id,
produit.nom as libelle,
commande_contenu.*,
commande.id_client, commande.id_commande, commande.type,
pack_sous_pack.nom
FROM stock_historique
INNER JOIN stock USING(stock_id)
INNER JOIN produit USING(produit_id)
INNER JOIN commande_contenu USING(stock_cmd)
LEFT JOIN pack_sous_pack ON pack_sous_pack_id = sous_pack_id
INNER JOIN commande ON commande_contenu.commande_id = commande.id_commande
WHERE commande.id_client='004617'
GROUP BY stock.stock_id
ORDER BY stock_historique.stock_cmd ASC 


Hors je devrais obtenir ceci :

+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+
| ID stock | libelle pack | libelle produit | sérial | etat | Actif | ID cmd | stock_cmd | ID contenu |
+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+
| 19 | | Alim R | | eC | 1 | 7 | 19 | 19 |
-----------------------------------------------------------------------------------------------------------------
| 12 | pack+alim | R 128Mo |0-012 | eC | 1 | 7 | 20 | 20 |
-----------------------------------------------------------------------------------------------------------------
| 18 | pack+alim | Alim R | | eC | 1 | 7 | 20 | 20 |
-----------------------------------------------------------------------------------------------------------------
| 58 | | Boitier |0-001 | R | 0 | 12 | 27 | 27 |
-----------------------------------------------------------------------------------------------------------------
| 59 | | Boitier |0-002 | eC | 1 | 13 | 27 | 29 |
-----------------------------------------------------------------------------------------------------------------
| 60 | 1er ss pack | R 512Mo |0-019 | eC | 1 | 14 | 28 | 30 |
-----------------------------------------------------------------------------------------------------------------
| 34 | 1er ss pack | Alim R | | eC | 1 | 12 | 28 | 28 |
-----------------------------------------------------------------------------------------------------------------
| 57 | 1er ss pack | R 512Mo | 0-006 | R | 0 | 12 | 28 | 28 |
+----------+---------------+-----------------+-------+-----+------+----------+-------------+-------------+ 


Je ne dis pas que le résultat que j'obtiens n'est pas logique, il l'est vu que j'ai des produits dans des packs et qu'à la jointure apparemment il ne fait plus cette différence et donne un numéro d'id contenu à tout produit appartenant au pack ciblé.

J'ai beau faire la requete dans un sens comme dans l'autre c'est à dire partir de la table commande -> table stock historique (ce qui là n'est plus logique), le problème reste le même, l'affichage cafouille quand je lui demande les informations contenues dans la table commande_contenu... hors ce sont les informations les plus importantes
je ne sais plus quoi faire
si quelqu'un a une idée je suis preneuse.
merci par avance.

2 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
17 nov. 2010 à 14:41
Bonjour,

Je me demande si le problème ne vient pas plutôt du champ utilisé pour l'affichage...
Tu pourrais nous dire à quel champ de ta requête correspond la dernière colonne, « ID Contenu » ? Et vérifier que c'est bien ça qui est affiché...

Xavier

PS : « or », et pas « hors » comme tu l'as écrit à deux reprises ;)
0
Riwalenn Messages postés 364 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 16 février 2015 101
Modifié par Riwalenn le 17/11/2010 à 19:33
id contenu est dans la table commande_contenu. l'id à la base est auto-incrément, seulement ma table commande contenu contient des packs de produit ou des produits seuls, du style :

id_commande_contenu | commande_id | pack_id (qui contient plusieurs produit_id) | produit_id | stock_cmd | sous_pack_id (qui est un pack d'un pack ^^)

sur une ligne tu ne peux pas avoir pack_id et produit_id remplit en même temps. une ligne contient donc soit un pack, soit un produit. une autre table définissant les produits contenus dans les packs ^^ (je sais c'est pas trop clair). C'est ce qu'on appelle des tables de gabarit.

pour avoir le stock je dois faire la relation entre les gabarits contenus dans les tables de commandes et les tables de stocks. Et donc lorsque je demande l'affichage des packs, ça cafouille vu que j'utilise un auto-increment pour le commande_contenu_id car dans un pack il peut y avoir 4 produits par exemple et donc 4 même id.

mais à la base je faisais ça pour pouvoir afficher sur ma page les produits seuls. Pour que cela fonctionne j'ai triché via le code php et j'ai fait un autre code sql (que je mettrais demain si j'y pense). Enfin ce nouveau code n'a pas résolu mon problème vu que je suis obligée de tricher ^^
0