Php 尝试使用MySQL中的键组合来自两个表的resultset

Php 尝试使用MySQL中的键组合来自两个表的resultset,php,sql,Php,Sql,我在MySQL数据库中有两个数据表,歌曲和文件,因此: 歌曲表: song_id | song_title | 1 | A Title | 2 | B Title | 文件表: file_id | file_name | parent_id | 1 | asong.mp3 | 1 | 2 | bsong.

我在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):

理想情况下,我只想查询数据库一次,并且一直在探索连接,但我不相信这是我需要的方法。我使用的是PHP5

非常感谢! Olly

使用聚合函数,该函数返回一组值,如下所示:

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代码中拆分逗号上的
文件名

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

你为什么说你不需要加入?我猜你父母的身份证明是这首歌?加入是最好的选择<代码>从文件中选择文件id,文件名在文件中加入歌曲。父项id=歌曲。歌曲id有两种方法可以获得,第一种是使用加入,而第二种只是使用where子句,要使用的查询必须是从歌曲中选择歌曲id,文件id,父项id,父id=song_id的文件我假设父id是引用song_id的外键,对吗?如果可以的话,那么你必须使用内部连接子句。我觉得parent_id很奇怪。你的where-be-song\u-id=file\u-id不是吗?parent\u-id列似乎没有必要。我最终并不需要它,但是+1是一个非常有用的函数,我不知道!干杯
group_concat(file_name order by file_id) as file_names