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

 MySQL Discussion :

requete CONCAT sur deux tables


Sujet :

MySQL

  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut requete CONCAT sur deux tables
    une table avec liste de commerciaux :

    contacts (id_comm, nom_comm, ..... )

    une table de liste de départements

    zonage (id_zone, comm_zone, dept_zone)


    la tentative de requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT c.nom_comm, CONCAT( z.dept_zone )
    FROM contacts AS c
    INNER JOIN zonage AS z ON c.nom_comm = z.comm_zone
    GROUP BY c.nom_comm
    J'aurais en fait souhaité avoir une concaténation des departements pour les commerciaux ...

    ceci donne le même resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT c.nom_comm, CONCAT( z.dept_zone )
    FROM contacts AS c
    INNER JOIN zonage AS z ON c.nom_comm = z.comm_zone
    GROUP BY z.comm_zone
    Je n'ai en fait qu'un département dans le concat ...

    En gros je voudrais le même resultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT c.nom_comm, z.dept_zone
    FROM contacts AS c
    LEFT OUTER JOIN zonage AS z ON c.nom_comm = z.comm_zone
    mais au lieu d'avoir x ligne pour un commercial avec à chaques fois un departement unique, je voudrais tous les départements ensemble en une seule ligne pour un commercial
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Bon d'après ce que j'ai pu lire le CONCAT ne sert qu'a concaténéer des colonnes dans un seul et même enregistrement ...
    Ce n'est pas ce que je recherche ...

    en fait au lieu d'avoir
    Nom Dept
    Paul 75
    Paul 78
    Paul 95
    Jean 27
    Jean 60
    je voudrais obtenir
    Paul 75, 78, 95
    Jean 27, 60
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    à la place d'ou tu as mit concat()

    utilise GROUP_CONCAT(dept SEPARATOR ", ")

    et tu group by nom

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Ce qui nous donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.nom_comm, GROUP_CONCAT( z.dept_zone
    SEPARATOR ", " )
    FROM contacts c
    JOIN zonage z ON c.nom_comm = z.comm_zone
    GROUP BY c.nom_comm


    Merci
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    cela fonctionne ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Arf presque sauf que ...

    il se trouve que j'ai des noms identiques et que je peux les différentier dans contact par une fonction différente ... comm_titre
    sinon les commerciaux de même nom concatènent leurs départements...

    J'ai essayé par Id_comm dans contacts mais cela ne fonctionne pas ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    peut tu nous afficher le contenu de la table? et/ou la structure ?

    tout du moins la liste total des champs de contact


    cette requète ne fonctionne donc pas ?

    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT c.nom_comm, GROUP_CONCAT( z.dept_zone
    SEPARATOR ", " )
    FROM contacts c
    JOIN zonage z ON c.nom_comm = z.comm_zone
    GROUP BY c.id_comm

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    la liste complète non mais les champs utiles oui ...

    contacts (id_comm, nom_comm, titre_comm)
    zonage (id_zone, nom_zone, dept_zone)

    JOIN ON nom_comm=nom_zone
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Il y a du mieux, j'ai bien les deux nom identiques sur deux ligens séparées, mais leurs départements sont quand meême concaténés

    je subodore la nécessité d'un HAVING ou d'un WHERE ?

    Voilà ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom      Dept
    TRUC  	SU, DC
    TRUC 	SU, DC
    Et ce que je souhaiterais obtenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nom      Dept
    TRUC  	SU
    TRUC 	DC

    en fait ce code est très proche de la vérité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT c.nom_comm commercial, GROUP_CONCAT( z.dept_zone
    ORDER BY z.dept_zone ASC
    SEPARATOR ", " ) Dept
    FROM contacts c
    JOIN zonage z ON c.nom_comm = z.comm_zone
    GROUP BY c.id_comm
    ORDER BY Dept ASC
    hormis le GROUP_CONCAT qui ne différentie les id_comm mais concatène les departements des deux poru chacun
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre Expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Par défaut
    Bon, je vais peut-être dire une connerie, mais il semblerait que ce soit à cause du GROUP_BY de la fin que tu as cette agrégation, non?

    Alors, je dis, pourquoi ne pas essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT c.nom_comm commercial, GROUP_CONCAT( z.dept_zone
    ORDER BY z.dept_zone ASC
    SEPARATOR ", " ) Dept
    FROM contacts c
    JOIN zonage z ON c.nom_comm = z.comm_zone
    GROUP BY c.nom_comm, c.id_comm
    ORDER BY Dept ASC
    Ou, peut-être que je me trompe ^^
    Solution à essayer

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    Je ne pense pas, j'y ai pensé tout le long du trajet en rentrant ...
    Et je suis arrivé à la conclusion que je me suis trompé de clef pour la table zonage ...
    Il me faut passer un id_comm et pas un nom_comm dans la table zonage seul l'id_comm est unique.

    Je teste tout ça demain !

    Merci de votre aide en tout cas
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    le problème est bien sur la relation entre les deux tables qui ne repose pas sur un champ unique

    j'en viens à me poser cette question :

    en mettant de coté toute informations relatives à ces tables (comme le fait que tu connaisses ces personnes etc...) serait tu capable de savoir qui est qui avec des résultat tel que :

    Paul : 92, 95
    Paul : 78, 91



    je pense qu'une restructuration de la table zonage s'impose là

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 661
    Billets dans le blog
    1
    Par défaut
    bon c'était bien ça ....
    j'ai repris l'id de la table commerciaux dasn la table zonage au lieu du nom ...

    et tout roule ...
    erreur de débutant sur la structure des tables ...


    Merci de vos lumières...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/08/2009, 15h43
  2. Requete SQL sur deux tables
    Par sat83 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2007, 11h12
  3. requête count sur deux tables
    Par psychoBob dans le forum Requêtes
    Réponses: 7
    Dernier message: 13/06/2006, 16h12
  4. requete sur deux tables
    Par rdams dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/04/2006, 15h42
  5. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 17h18

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