Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to group mysql rows with same column value into one row?

I have two tables, keywords and data.

Table keywords have 2 columns (id, keyword), table data have 3 columns (id[foreign key of keywords.id], name, value).

I am using this query:

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

it returns something like:

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

Each id can have values from 0 to 3 (maybe more in the future).

How can I retrieve all the rows with the same id in the same row?

Like

1 123 456 2 943 3 542 532 682 

I want to do this because I want to be able to sort the values.

like image 385
jarkam Avatar asked Sep 08 '10 03:09

jarkam


People also ask

How do I combine multiple rows of data into one row in SQL?

You can concatenate rows into single string using COALESCE method. This COALESCE method can be used in SQL Server version 2008 and higher. All you have to do is, declare a varchar variable and inside the coalesce, concat the variable with comma and the column, then assign the COALESCE to the variable.


1 Answers

Use GROUP_CONCAT() like this:

 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 

Also, you may need to do ORDER BY d.name to get exact order of values as you want. Like this:

 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 
like image 59
shamittomar Avatar answered Sep 28 '22 16:09

shamittomar