我在MySQL数据库中有两个数据表songs
和files
:
歌曲表:
song_id | song_title |
1 | A Title |
2 | B Title |
文件表:
file_id | file_name | parent_id |
1 | asong.mp3 | 1 |
2 | bsong.mp3 | 1 |
我想创建一个SQL查询来返回这样的集合(其中song_id = 1):
song_id => 1
song_title => A Title
song_files = Array(
0 => Array(
file_id => 1
file_name => asong.mp3
)
1 => Array(
file_id => 2
file_name => bsong.mp3
)
)
理想情况下,我只想查询数据库一次,并且一直在探索JOIN,但我不相信这是我需要的方法。我正在使用PHP 5
非常感谢! 奥利
答案 0 :(得分:1)
使用GROUP_CONCAT()
聚合函数,该函数返回CSV个值,如下所示:
select song_id, song_title, group_concat(file_name) as file_names
from songs
join files on files.parent_id = songs.song_id
group by 1, 2
结果如下:
song_id | song_title | file_names
---------------------------------------------------
1 | A Title | asong.mp3,bsong.mp3
如果你想要一个文件名数组,你必须在php代码中的逗号上分割file_names
值。
group_concat返回的术语顺序未定义,但如果文件名的顺序很重要,则可以在 group_concat中嵌入order by
。例如,对于字母顺序使用:
group_concat(file_name order by file_name) as file_names
或文件创建订单使用:
group_concat(file_name order by file_id) as file_names