0

私は2つのデータテーブルを持っておりsongsfilesMySQLデータベースには次のように書かれています:

歌の表:

  song_id   |   song_title    |
     1      |     A Title     |
     2      |     B Title     |

ファイル テーブル:

  file_id   |    file_name    |  parent_id  |
    1       |    asong.mp3    |     1       |
    2       |    bsong.mp3    |     1       | 

次のようなセットを返す 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
          )
)

理想的には、データベースに 1 回だけクエリを実行し、JOIN を調査してきましたが、それが必要な方法であるとは確信していません。私はPHP 5を使用しています

どうもありがとう!オリー

4

1 に答える 1

1

次のように、値のCSVGROUP_CONCAT()を返す集計関数を使用します。

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によって返される用語の順序は定義されていませんが、ファイル名の順序が重要な場合は、group_concatorder by にを埋め込むことができます。たとえば、アルファベット順の場合は次のようになります。

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 に答える