Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL - croisement entrée et group concat

    20 septembre 2021 à 22:31:33

    Bonsoir,

    Je reconnais que je suis une quiche en SQL, car je n'arrive pas à trouver la requête qui me permetra de retourner ce tableau:

    nom | ref | refs | autre

    A | 1 | 2, 3 | autre1

    B | 2 | 1, 3 | autre2

    C | 3 | 1, 2 | autre1

    Il y a des doublons dans nom mais je dois les garder et afficher les refs des doublons.

    GROUP_CONCAT ne fonctionne que si je GROUP BY nom. Et le tout est sur la même table..

    Je me tire les cheveux au secours!!!

    -
    Edité par Seds 20 septembre 2021 à 22:33:04

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2021 à 23:12:57

      Dans ton tableau, je vois les doublons dans autre et non pas dans nom. Tu devrais faire une relation 1,1 (si la colonne autre est NOT NULL, 0,1 sinon) avec une deuxième table AUTRES qui contiendrait une colonne clé primaire, une colonne de la référence. Ainsi, la colonne autre de cette table ne serait que la clé étrangère qui fait référence à la clé primaire d'AUTRES.

      Ensuite, tu fais une jointure avec les clauses que tu veux et le tour est joué. D'ailleurs, ce que tu veux ressemble fortement à : https://openclassrooms.com/fr/courses/1959476-administrez-vos-bases-de-donnees-avec-mysql/1967834-regroupement#/id/r-1984553

      La table ANIMAL ( // ta table) contient une clé étrangère espece_id ( // autre) qui fait référence à la clé primaire de la table ESPECE ( // AUTRES). En faisant la jointure, on peut récupérer les valeurs des colonnes non clés primaires d'ESPECE (// AUTRES).

      • Partager sur Facebook
      • Partager sur Twitter
        21 septembre 2021 à 9:02:39

        Bonjour,

        Quelle est la structure de ta base (tables, colonnes, types, clés, contraintes) ?

        Quelle requête SQL te donne le résultat actuel ?

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          23 septembre 2021 à 16:44:10

          Bonjour merci pour vos retours, pardon je vais être plus claire

          La requête est à faire sur une seule table où les entrées se présentent en gros ainsi :

          0: nom => A, ref => 1, autre = x

          1: nom => A, ref => 2, autre = y

          2: nom => A, ref => 3, autre = x

          3: nom => B, ref => 4, autre = y

          4: nom => C, ref => 5, autre = z

          dans autre il peut y avoir des doublons mais ça n'a pas d'incidence

          l'idée est de trouver ce résultat:

          A | 1 | 2, 3 | x

          A | 2 | 1, 3 | y

          A | 3 | 1, 2 | x

          B | 4 | 4 | y

          C | 5 | 5 | z

          tout ce que j'ai réussi à faire c'est 2 requetes: un select all, et un group_concat sur ref as refs en group by nom

          et je traite le résultat en comparant le nom pour afficher refs, mais du coup j'ai le doublon ref de l'entrée dans son refs

          -
          Edité par Seds 23 septembre 2021 à 16:53:41

          • Partager sur Facebook
          • Partager sur Twitter
            23 septembre 2021 à 17:27:31

            SELECT
            	T1.nom,
            	T1.ref,
            	IF( T2.nom IS NULL, T1.ref, GROUP_CONCAT( T2.ref ) ) AS refs
            	T1.autre
            FROM
            	matable T1
            		LEFT JOIN matable T2
            			ON T1.nom = T2.nom
            			AND T1.ref <> T2.ref
            GROUP BY
            	T1.nom,
            	T1.ref,
            	T1.autre
            ORDER BY
            	T1.nom,
            	T1.ref
            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

            SQL - croisement entrée et group concat

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown