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 :

requête SQL : question


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut requête SQL : question
    Bonjour à tous,
    moi qui ne suit pas très fort en sql,
    je me demande s'il est possible de faire la chose que je souhaite ...

    Je vais essayer d'être claire dans les explications :
    j'ai 3 tables
    maTable1
    - id : 1, 2, 3, 4, 5
    - libelle : un, deux, trois, quatre, cinq
    maTableRelation
    - idTable1 : 1, 1, 1, 2, 2
    - idTable2 : 1, 2, 3, 4, 5
    maTable2
    - id : 1, 2, 3, 4, 5
    - libelle : one, two, three, four, five

    (un est lié avec one, two et three, deux est lié avec four et five)

    Est-il possible de faire afficher par une requête le résultat suivant dans une même ligne (ou un même enregistrement) :
    un, one two three
    deux, four five
    trois
    quatre
    cinq

    c'est à dire, une sorte de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT maTable1.libelle, CONCAT(SELECT maTable2.libelle FROM maTableRelation WHERE ???) 
    FROM maTable1 
    LEFT JOIN maTable1.id = maTableRelation.idTable1 
    LEFT JOIN maRelationTable.idTable2 = maTable2.id
    J'éspère avoir été clair dans mon énoncé, en tout cas j'ai essayé

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Quel est le votre SGBD ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    aH SORRY,

    mySQL

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Ça devrait être quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      select t1.libelle, group_concat(t2.libelle order by t2.id asc separator " ")
        from maTable1 as t1
             left outer join maTableRelation as tr
             inner join maTable2 as t2
               on t2.id = tr.idTable2
               on tr.idTable1 = t1.id
    group by t1.libelle

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    Excuse moi mais j'ai comme l'impression que tu es tout simplement énorme,
    beaucoup,
    et merci encore pour la rapidité de ta réponse qui colle parfaitement

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par Australia Voir le message
    Excuse moi mais j'ai comme l'impression que tu es tout simplement énorme
    Juste un peu enrobé ©Obélix

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut
    Bonjour,

    je rebondis sur votre question (si vous me le permettez) car moi-même je m'en pose .

    En effet, je suis novice sur SQL (ainsi que sur MySQL) et je voulais savoir toujours par rapport à ton exemple s'il était possible de ne choisir que :
    un, one two three
    deux, four five

    En gros mettre en place une vue qui ne permettrait de sélectionner que l'information dont on a besoin... me suis-je bien fait comprendre?

    De plus, je voulais savoir aussi, si au travers d'une ihm, il est possible d'implémenter cette vue? Par exemple, si dans une ihm quelconque (une boite de dialogue qui va voir le champ 'libelle' de la table1) je choisi le 'un', il m'affiche 'one two three', si je choisi 'deux', il m'affiche 'four five'. Est-ce clair?

    Merci d'avance

  8. #8
    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
    Citation Envoyé par thesoprano69 Voir le message
    En gros mettre en place une vue qui ne permettrait de sélectionner que l'information dont on a besoin... me suis-je bien fait comprendre?
    Il suffit d'ajouter une clause de restriction sur les données (WHERE) avec les conditions qui détermineront les valeurs souhaitées.

    De plus, je voulais savoir aussi, si au travers d'une ihm, il est possible d'implémenter cette vue? Par exemple, si dans une ihm quelconque (une boite de dialogue qui va voir le champ 'libelle' de la table1) je choisi le 'un', il m'affiche 'one two three', si je choisi 'deux', il m'affiche 'four five'. Est-ce clair?
    C'est bien entendu réalisable mais ça dépend du langage de programmation utilisé et ce n'est plus l'objet de ce forum.
    Il faut chercher dans le forum consacré au langage choisi.
    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 !

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Par défaut
    merci pour ta réponse rapide, je vais aller fouiller un peu dans les autres forum, j'avais surtout besoin d'une réponse en terme de faisabilité ce dont je te remercie.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    je me suis permis de ré ouvrir ce post car j'ai une question suite à la solution "clé en main" de Waldar,

    Il se trouve que dans mon cas concret, j'ai une autre table de relation
    maTableRelationBis :
    - idTable1
    - idTable2

    En fait lorsque j'applique la solution group_concat 2 fois, selon les données, mySQL (ou plutot ma mauvaise requete) muliplie les données...
    ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT t1.libelle, group_concat(t2.libelle ORDER BY t2.id ASC separator " ") AS TR1, group_concat(t3.libelle ORDER BY t3.id ASC separator " ") AS TR2
        FROM maTable1 AS t1
             LEFT OUTER JOIN maTableRelation AS tr
             INNER JOIN maTable2 AS t2
               ON t2.id = tr.idTable2
               ON tr.idTable1 = t1.id
             LEFT OUTER JOIN maTableRelationBis AS trBis
             INNER JOIN maTable2 AS t2
               ON t2.id = trBis.idTable2
               ON trBis.idTable1 = t1.id
    GROUP BY t1.libelle
    Bon ca marche à peu prêt bien si ce n'est que, le résultat se duplique dans une colonne

    exemple avec les données :
    Rappel :
    maTable1
    - id : 1
    - libelle : un
    maTableRelation
    - idTable1 : 1
    - idTable2 : 1
    maTable2
    - id : 1, 2, 3, 4, 5
    - libelle : one, two, three, four, five
    maTableRelationBis
    -idTable1 : 1, 1, 1
    -idTable2 : 2, 3, 4

    je me retrouve avec le résultat suivant :

    t1.libelle, TR1, TR2
    un, un un un , two three four
    Si qqun a une idée mais je me doute qu'avec mon exemple, ca commence à être tordu d'y comprendre qqchose ...

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Il faut en fait passer par deux sous-requêtes.
    Une pour maTableRelation, une autre pour maTableRelationBis, et les réunir à un niveau supérieur.

    Je ne prends pas le temps de tout écrire, mais quelque chose comme ceci :
    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
    SELECT * FROM
    (
      SELECT t1.libelle, group_concat(t2.libelle ORDER BY t2.id ASC separator " ")
        FROM maTable1 AS t1
             LEFT OUTER JOIN maTableRelation AS tr
             INNER JOIN maTable2 AS t2
               ON t2.id = tr.idTable2
               ON tr.idTable1 = t1.id
    GROUP BY t1.libelle
    ) AS SR1
    INNER JOIN
    (
      SELECT t1.libelle, group_concat(t2.libelle ORDER BY t2.id ASC separator " ")
        FROM maTable1 AS t1
             LEFT OUTER JOIN maTableRelationBis AS tr
             INNER JOIN maTable2 AS t2
               ON t2.id = tr.idTable2
               ON tr.idTable1 = t1.id
    GROUP BY t1.libelle
    ) AS SR2
      ON SR2.libelle = SR1.libelle
    À vous de bien définir la jointure entre SR1 / SR2 (forte ou externe), et il serait plus sage d'effectuer celle-ci sur l'id plutôt que le libellé.

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Par défaut
    Merci pour l'info, j'essaye de mettre ca en application dans mon code et dès que ca marche je clos le post

Discussions similaires

  1. Question simple requête SQL
    Par parapluie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/07/2010, 11h53
  2. [MySQL] [Requête SQL] Question Fonctions PHP
    Par Paul75 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 22/09/2008, 09h05
  3. [SQL] Question sur requête SQL
    Par Cheeper dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/06/2007, 17h56
  4. Requte Sql Avancée, question ... ? Estce possible ?
    Par plex dans le forum Administration
    Réponses: 8
    Dernier message: 14/12/2005, 15h13

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