如何修改这个MySQL查询以获得特定的数据结构?


How can I modify this MySQL query to get a particular data structure?

如果有两个简单的表:

照片:

photoid | filename            | albumid
1       | something.jpg       |    1
2       | somethingelse.jpg   |    1

和一个Albums表:

  albumid   | album_name        | owner_id
    1       | My Holiday 2012   |    1
    2       | My Holiday 2013   |    6

我想获得给定owner_id

所有相册中包含的所有照片

我可以这样做:

select albums.*, photos.*
from photo_albums as albums
left join photos as photos
on albums.albumid = photos.albumid
where albums.owner_id = :owner_id

这将为每张照片返回2行,以及相关的相册数据。

然而,我想做的是只返回每个专辑的一行。照片行嵌套在每个相册行中。

返回类似以下内容的输出:

[{
    albumid : 1,
    album_name : My Holiday 2012,
    owner_id : 1,
    photos : {
                 photoid : 1,
                 filename : something.jpg
             },
             {
                 photoid : 2,
                 filename : somethingelse.jpg
             }   
}]

是否有一个简单而有效的方法来做到这一点,在MySQL查询本身?如果有,那是怎么回事?或者,我最好从原始查询中获取完整的行数据,并通过循环php中的行将数据构造到这个输出中?

Thanks in advance

不能通过修改SQL查询来实现。

我认为有两种方法可以达到你的目标:

  1. 对输出进行后处理以构建所需的数组结构。
  2. 使用ORM(对象关系映射)将查询结果自动映射到对象。例如,参见Doctrine。