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

Requêtes MySQL Discussion :

jointure sur 3 tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut jointure sur 3 tables
    Bonjour;
    j'ai un petit problème avec une requitte mysql (qui 3 jointure ), donc je me trouve perdu dans vague.
    alors j'ai 3 table:
    catalog_product_entity_varchar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    value_id                 int(11)          Identity
    entity_type_id        mediumint(8)   not null
    attribute_id           smallint(5       not null
    store_id                smallint(5       not null
    entity_id               int(10)           not null
    value                   varchar(255)    not null
    catalog_product_entity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    entity_id     int(10)             identity
    entity_type_id       smallint(8)        not null
    attribute_set_id     smallint(5)        not null   
    type_id                varchar(32)       not null
    sku                      varchar(64)      null
    category_ids         text                 null
    created_at           datetime           not null
    updated_at          datetime           not null
    has_options         smallint(1)         not null
    catalog_category_product
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    category_id               int(10)       not null
    product_id               int(10)           not null
    position                 int(10)           not null
    alors je veux afficher entity_id et value qui on l'attribute_id= 56,70 de la table catalog_product_entity_varchar. jusqu'au là pas de problème.
    maintenant je veux joindre (catalog_product_entity_varchar avec catalog_product_entity dans entity_id) et les joindre avec catalog_category_product dans catalog_category_product.product_id = catalog_product_entity.entity_id. voilà ce que j'ai fait (je sais que des bêtises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT catalog_product_entity_varchar.entity_id,
      catalog_product_entity_varchar.value  
    from catalog_product_entity_varchar 
    inner join catalog_product_entity on
      catalog_product_entity.entity_id=catalog_product_entity_varchar.entity_id
     inner join catalog_category_product on 
    catalog_category_product.product_id = catalog_product_entity.entity_id where  catalog_category_product.category_id=18 and 
      catalog_product_entity_varchar.attribute_id in(56,70)
    j'ai eu comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    entity_id         .                           value
    4               .                  PALM PALM PDA TX Handheld
    4               .                  /P/A/PALM-TX__new.jpg
    5               .                 HP HP iPAQ 114 CLASSIC HANDHELD
    5               .                /F/A/FA982AA.jpg
    6               .                PALM PALM Z22 Handheld
    6               .               /P/A/PALM-Z22__new.jpg
    maintenant, je cherche à voir comme résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    entity_id        .          value                      .     value
    4             .    PALM PALM PDA TX Handheld        .  P/A/PALM-TX__new.jpg
    5             .    HP HP iPAQ 114 CLASSIC HANDHELD  . F/A/FA982AA.jpg
    6             .    PALM PALM Z22 Handheld           .  /P/A/PALM-Z22__new.jpg
    je sais pas si j'ai bien expliqué mais j'espère bien que vous m'aider.

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Tout cela est assez brouillon, mais je crois avoir décelé que la solution à ton problème se trouve dans l'emploi de la fonction GROUP_CONCAT couplée avec un GROUP BY.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut
    merci bien mais je voix pas ce que veut me dire. tu peut me donner un exemple

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT cpev.entity_id  , GROUP_CONCAT(DISTINCT cpev.value) liste
    FROM catalog_product_entity_varchar cpev
    INNER JOIN catalog_product_entity cpe ON cpe.entity_id=cpev.entity_id
    INNER JOIN catalog_category_product ccp ON ccp.product_id = cpe.entity_id
    WHERE  ccp.category_id=18 AND cpev.attribute_id IN(56,70)
    GROUP BY cpev.entity_id
    ORDER BY cpev.entity_id
    Ça devrait donner quelque chose come ça.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut
    ça me donne l'erreur suivante :
    MySql.Data.MySqlClient.MySqlException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT catalog_product_entity_varchar.value) liste from ((catalog_product_enti' at line 1 at MySql.Data.MySqlClient.MySqlStream.OpenPacket() at MySql.Data.MySqlClient.NativeDriver.ReadResult(UInt64& affectedRows, Int64& lastInsertId) at MySql.Data.MySqlClient.MySqlDataReader.GetResultSet() at MySql.Data.MySqlClient.MySqlDataReader.NextResult() at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) at MySql.Data.MySqlClient.MySqlCommand.ExecuteDbDataReader(CommandBehavior behavior)

  6. #6
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut
    voilà ce que j'ai eu dans un tableau, c'est déjà pas mal
    entity_id liste
    4 PALM PALM PDA TX Handheld ,/P/A/PALM-TX__new.jpg
    5 HP HP iPAQ 114 CLASSIC HANDHELD ,/F/A/FA982AA.jpg
    6 PALM PALM Z22 Handheld ,/P/A/PALM-Z22__new.jpg

    maintenant il faut je sépare la colonne "liste" en deux colonne

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    On va simplifier l'écriture de la requête en utilisant des alias, ce sera plus lisible...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT v.entity_id, GROUP_CONCAT(v.value SEPARATOR ':') AS 'Value:Value'
    FROM catalog_product_entity_varchar AS v
    INNER JOIN catalog_product_entity AS e ON e.entity_id = v.entity_id
     INNER JOIN catalog_category_product AS p ON p.product_id = e.entity_id WHERE  p.category_id = 18 AND v.attribute_id IN(56,70)
    GROUP BY v.entity_id
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. jointure sur 3 tables
    Par jojo22222 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/01/2006, 22h47
  2. Jointure sur 3 tables
    Par tonymontana4192 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/11/2005, 13h24
  3. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  4. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 11h56

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