如果有两个简单的表:
照片:
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查询来实现。
我认为有两种方法可以达到你的目标:
- 对输出进行后处理以构建所需的数组结构。
- 使用ORM(对象关系映射)将查询结果自动映射到对象。例如,参见Doctrine。