2013-08-23 4 views
0

Простой вопрос:CONCAT группу SELECT, в другом SELECT,

Есть 2 таблицы:

  1. Жанр [имя, songID]

  2. Song [идентификатор, название, идентификатор пользователя, статус]

    SELECT id, name, title, userID, status FROM songs INNER JOIN genre ON song.id = genre.songID ORDER BY id ASC;

Что запрос, чтобы получить результат от

+----+-------------+----------------------+--------+--------+ 
| id | genre.name | song.title   | userID | status | 
+----+-------------+----------------------+--------+--------+ 
| 1 | tech  | Feel it all   |  1 |  1 | 
| 2 | tech  | Tester    |  1 |  1 | 
| 3 | music  | Sejujurnya   |  1 |  1 | 
| 4 | music  | Not Done    |  1 |  1 | 
| 5 | life  | Cinta    |  1 |  1 | 
| 6 | life  | Feel it all   |  1 |  1 | 
| 7 | life  | Not Done    |  1 |  1 | 
| 8 | truth  | Tester    |  1 |  1 | 
| 9 | tree  | Tester    |  1 |  1 | 
| 10 | climb  | Tester    |  1 |  1 | 
+----+-------------+----------------------+--------+--------+ 

в

+----+-------------+---------------------------------+--------+--------+ 
| id | genre.name | song.title      | userID | status | 
+----+-------------+---------------------------------+--------+--------+ 
| 1 | tech  | Feel it all,Tester    |  1 |  1 | 
| 2 | music  | Sejujurnya, Not Done   |  1 |  1 | 
| 3 | life  | Cinta, Feel it all, Note Done |  1 |  1 | 
| 4 | truth  | Tester       |  1 |  1 | 
| 5 | tree  | Tester       |  1 |  1 | 
| 6 | climb  | Tester       |  1 |  1 | 
+----+-------------+---------------------------------+--------+--------+ 

Благодарности

+0

Возможный дубликат http://stackoverflow.com/questions/4650744/mysql-multiple-row-to-single-row –

+0

Я думаю, что я вижу шаблон, названия из одного жанра взорваны, но затем какова сделка с «мрак» и «бука»? Их даже нет в оригинальной таблице. –

+1

Посмотрите на функцию [GROUP_CONCAT] (http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat) в MySQL. @Declan_K: ваша ссылка для SQL-сервера, которая немного отличается. –

ответ

1

Использование GROUP_CONCAT с GROUP BY

SELECT 
    id, 
    genre.name, 
    GROUP_CONCAT(title) as title, 
    userID, 
    status 
FROM 
    songs 
INNER JOIN 
    genre 
ON 
    song.id=genre.songID 
GROUP BY 
    genre.name 
ORDER BY 
    id ASC 
+0

Потрясающий друг работы. Потрясающие. – AFwcxx

+0

@AFwcxx здесь возвращаемое поле 'id' здесь было бы бессмысленным, поскольку оно относится только к одной из песен, вы можете изменить concat на' GROUP_CONCAT (CONCAT (id, "-", title)) в качестве заголовка, 'так что вы все еще можете иметь идентификатор песни с заголовком и просто разделить их в своем коде, то есть' explode ("-", $ title); ' –

0
SELECT 
    `Songs`.`id`, 
    `Genre`.`Name`, 
    GROUP_CONCAT(`Songs`.`Title`) as Title, 
    `Songs`.`userID`, 
    `Songs`.`status` 
FROM 
    `Genre`, 
    `Songs` 
WHERE 
    `Genre`.`SongID` = `Songs`.`id` 
GROUP BY 
    `Genre`.`Name`