IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

question jointure fiche produit avec relation


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut question jointure fiche produit avec relation
    Bonjour à tous,
    j'ai un problème avec ma requête qui me parais si simple afin de récupérer les produits en relations avec les données qui correspondent.
    ma table mc_catalog:
    • idcatalog(primary)
    • titlecatalog
    • desccatalog

    ma table mc_catalog_c:
    • idclc(primary)
    • clibelle

    ma table mc_catalog_s:
    • idcls(primary)
    • idclc
    • slibelle

    ma table mc_catalog_product:
    • idproduct(primary)
    • idcatalog
    • idclc
    • idcls

    mc_catalog_rel_product
    • idrelproduct(primary)
    • idcatalog
    • idproduct


    La table rel product retourne uniquement les produits en relation avec cette fiche (idcatalog) mais il me faut les informations de toutes ses relations d'où les jointures mais je n'y parviens pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT rel.idrelproduct,rel.idcatalog,rel.idproduct,c.clibelle,s.slibelle,cat.titlecatalog,s.idcls
    FROM mc_catalog_rel_product as rel 
    JOIN mc_catalog_product as prod ON(rel.idcatalog= prod.idcatalog)
    JOIN mc_catalog_c as c ON(prod.idclc = c.idclc)
    JOIN mc_catalog_s as s ON(prod.idcls = s.idcls)
    JOIN mc_catalog as cat ON(prod.idcatalog= cat.idcatalog)
    Cette requête est complètement à côté de la plaque, je pense que je dois utiliser des jointure couplée avec des sous requêtes

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Vous avez oublié de préciser :
    1. Votre SGBD
    2. Ce qui ne fonctionne pas
    3. Un jeu d'essai

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Oh désolé, j'ai rédigé trop vite
    Mon SGBD mysql 5.
    Je ne parviens pas à retourner les produits liés(table mc_catalog_rel_product) avec leurs informations respective.
    J'ai construit des tables de liaison pour plusieurs raison étant surtout de stocker certaine donnée séparément.
    Dans ce cas je ne parviens pas à lister uniquement les produits de la table mc_catalog_rel_product via idcatalog (la base même pour faire correspondent les produits à une fiche).
    J'ai une table de liaison entre mc_catalog(la fiche produit), mc_catalog_c(les catégories), mc_catalog_s(les sous catégories liés aux catégories) qui n'est autre que mc_catalog_product.
    Je veux lister les produits de la table rel avec les bonnes informations les concernant tel que titlecatalog,clibelle,slibelle ...
    LE problème c'est que le résultat est totalement incorrect sachant qu'il me retourne plusieurs fois la même ligne dans le cas ou plusieurs articles sont présent dans mc_catalog_product mais qu'un seul dans mc_catalog_rel_product (je n'en veux qu'un avec ses infos)
    J'ai un peu de mal à expliquer ce petit problème

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Voir le point 3 de mes remarques, là c'est du charabia

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Si c'est pour les tables voila un jeu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    CREATE TABLE IF NOT EXISTS `mc_catalog_rel_product` (
      `idrelproduct` int(6) NOT NULL,
      `idcatalog` int(6) NOT NULL,
      `idproduct` int(6) NOT NULL,
      PRIMARY KEY (`idrelproduct`),
      KEY `idcatalog` (`idcatalog`),
      KEY `idproduct` (`idproduct`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    CREATE TABLE IF NOT EXISTS `mc_catalog_product` (
      `idproduct` int(6) NOT NULL AUTO_INCREMENT,
      `idcatalog` int(6) NOT NULL,
      `idclc` tinyint(3) NOT NULL,
      `idcls` tinyint(3) NOT NULL DEFAULT '0',
      PRIMARY KEY (`idproduct`),
      KEY `idclc` (`idclc`),
      KEY `idcatalog` (`idcatalog`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
    CREATE TABLE IF NOT EXISTS `mc_catalog` (
      `idcatalog` int(6) NOT NULL AUTO_INCREMENT,
      `titlecatalog` varchar(125) NOT NULL,
      `desccatalog` text NOT NULL,
      PRIMARY KEY (`idcatalog`),
      KEY `idclc` (`idlang`),
      KEY `idadmin` (`idadmin`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='table du catalogue';
    CREATE TABLE IF NOT EXISTS `mc_catalog_c` (
      `idclc` tinyint(3) NOT NULL AUTO_INCREMENT,
      `clibelle` varchar(125) NOT NULL,
      `idlang` tinyint(1) NOT NULL DEFAULT '0',
      PRIMARY KEY (`idclc`),
      KEY `idlang` (`idlang`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='table des catégories du catalogue' ;
    CREATE TABLE IF NOT EXISTS `mc_catalog_s` (
      `idcls` tinyint(3) NOT NULL AUTO_INCREMENT,
      `slibelle` varchar(125) NOT NULL,
      `idclc` tinyint(3) NOT NULL,
      PRIMARY KEY (`idcls`),
      KEY `idclc` (`idclc`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='table des sous catégories du catalogue' ;
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT rel.idrelproduct,rel.idproduct FROM mc_catalog_rel_product as rel
    WHERE idcatalog = 1
    Je sélectionne uniquement les produit lié au catalogue numéro 1 jusque la facile mais afin d'avoir les informations des identifiant, il me faut retourner à quoi correspond rel.idproduct dans la table mc_catalog_product qui lui même est dépendant de idcatalog dans cette même table pour retourner les informations de la table mc_catalog (avoir son titre, sa description, etc...)

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Quelles sont les relations entre vos différente table ?

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila les relations pour le moment:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE `mc_catalog_product`
      ADD CONSTRAINT `mc_catalog_product_ibfk_1` FOREIGN KEY (`idcatalog`) REFERENCES `mc_catalog` (`idcatalog`),
      ADD CONSTRAINT `mc_catalog_product_ibfk_2` FOREIGN KEY (`idclc`) REFERENCES `mc_catalog_c` (`idclc`);
    ALTER TABLE `mc_catalog_rel_product`
      ADD CONSTRAINT `mc_catalog_rel_product_ibfk_1` FOREIGN KEY (`idcatalog`) REFERENCES `mc_catalog` (`idcatalog`),
      ADD CONSTRAINT `mc_catalog_rel_product_ibfk_2` FOREIGN KEY (`idproduct`) REFERENCES `mc_catalog_product` (`idproduct`);
    Je dois les renforcer
    Mais pour mon problème je viens d'avoir ce que je voulais mais en deux requêtes, j'aimerai cependant les réduires à une seul car la boucle sur une requête alourdit la charge.
    La première requete pour récupérer les produits liés ou du moins le numéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT rel.idrelproduct,rel.idproduct FROM mc_catalog_rel_product AS rel
    WHERE rel.idcatalog = 1
    Ensuite je charge dans une boucle les informations de chaque produit lié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.idproduct,c.clibelle,s.slibelle,card.titlecatalog
            FROM mc_catalog_product AS p
            LEFT JOIN mc_catalog as card USING ( idcatalog )
            LEFT JOIN mc_catalog_c as c USING ( idclc )
            LEFT JOIN mc_catalog_s as s USING ( idcls )
            WHERE idproduct = 1
    Je suis sur que l'on peu réduire dans une seule requête avec une jointure qui effectue une sous requête avec elle même des jointures (me semble t-il?)

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/04/2015, 11h15
  2. Jointure de table avec Interbase
    Par ada_b dans le forum InterBase
    Réponses: 21
    Dernier message: 12/05/2010, 19h52
  3. [Swing] Affichage de fiches produits avec image
    Par calogerogigante dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 10/01/2008, 09h01
  4. Fiche Login avec une application MDI
    Par Andry dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/09/2004, 11h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo