web-dev-qa-db-fra.com

Comment regrouper des lignes mysql avec la même valeur de colonne en une seule ligne?

J'ai deux tableaux, mots clés et données.

Les mots-clés de table ont 2 colonnes (id, mot-clé), les données de table ont 3 colonnes (id [clé étrangère de mots-clés.id], nom, valeur).

J'utilise cette requête:

SELECT k.id, d.value, d.name
FROM keywords AS k
INNER JOIN data as d ON k.id = d.id

il renvoie quelque chose comme:

1 123 name1
1 456 name2
2 943 name1
3 542 name1
3 532 name2
3 682 name3

Chaque identifiant peut avoir des valeurs de 0 à 3 (peut-être plus à l'avenir).

Comment puis-je récupérer toutes les lignes avec le même identifiant dans la même ligne?

Comme

1 123 456
2 943
3 542 532 682

Je veux le faire parce que je veux pouvoir trier les valeurs.

43
jarkam

Utilisez GROUP_CONCAT() comme ceci:

 SELECT k.id, GROUP_CONCAT(d.value)
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id

Vous devrez peut-être également faire ORDER BY d.name pour obtenir l'ordre exact des valeurs comme vous le souhaitez. Comme ça:

 SELECT k.id, GROUP_CONCAT(d.value ORDER BY d.name separator ' ')
  FROM keywords AS k
  INNER JOIN data as d ON k.id = d.id
  GROUP BY k.id
78
shamittomar