0

我有两个数据表,songs因此files在 MySQL 数据库中:

歌曲表:

  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

非常感谢!奥利

4

1 回答 1

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

如果您想要一个文件名数组,则必须file_names在 php 代码中将值拆分为逗号。

group_concat 返回的术语顺序未定义,但如果文件名的顺序很重要,您可以order by group_concat 中嵌入 a。例如,对于字母顺序使用:

group_concat(file_name order by file_name) as file_names

或用于文件创建顺序使用:

group_concat(file_name order by file_id) as file_names
于 2012-06-06T14:59:06.503 回答