Pb de jointure entre 4 tables
Riwalenn
Messages postés
364
Date d'inscription
Statut
Membre
Dernière intervention
-
Riwalenn Messages postés 364 Date d'inscription Statut Membre Dernière intervention -
Riwalenn Messages postés 364 Date d'inscription Statut Membre Dernière intervention -
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 :
avec la requete suivante :
Hors je devrais obtenir ceci :
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.
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.
A voir également:
- Pb de jointure entre 4 tables
- Code gta 4 ps4 - Guide
- Tables des matières word - Guide
- Tables ascii - Guide
- Control center 4 - Télécharger - Divers Utilitaires
- Groupe de 4 personnes connus - Forum Musique / Radio / Clip
2 réponses
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 ;)
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 ;)
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 ^^
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 ^^