views:

89

answers:

1

I have to 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 from 0 to 3 values (maybe more in the future).

How can I retrieve all the rows with 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.

+1  A: 

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
shamittomar
Yes I forgot GROUP BY...
jarkam
Did you forget the `GROUP BY k.id`?
Amber
@Jarkam, because you haven't used `GROUP BY k.id` in this query.
shamittomar
Is there a way I can retrieve the values in different columns?
jarkam
@Jarkam, Like what ?
shamittomar
Like instead of comma separated values in ONE column, having different columns for each value.
jarkam
You can replace comma separated value with *anything* separated value. See the new example with `SEPARATOR ' '` which will separate the values by space. If you really want to display them in a very different way, you can split the comma separated values to individual values by your server side language (Perl, PHP, etc) and display it in any way you want. In PHP, this can be done by `explode(',', $csv);`
shamittomar
Yes, but if I can get them in separated columns I can easly sort anything. I NEED sorting because the query result is used in a datagrid.
jarkam
Sorry to disappoint, but you will need to do that with your server-side language. However, this is a separate questions, try posting as a new questions, someone *may* have a method to do that.
shamittomar
Thanks anyway, I will hardcode it until I can find a better way to do it.
jarkam