如何修改此MySQL查询以获取特定的数据结构?

时间:2013-04-09 17:43:40

标签: php mysql

如果我有两个简单的表格:

照片:

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

和相册表:

  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中的行将数据构建到此输出中?

提前致谢

1 个答案:

答案 0 :(得分:1)

您无法通过修改SQL查询来实现。

我看到了实现目标的两种方法:

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