我有一个'事件'表和'照片'表。每个事件可能在“照片”表中包含零个或多个与其对应的记录。以下sql为每个事件提供了单独的结果。
如何将照片聚合到一个事件的单个字段中,以便每个结果都是一个独特的事件,并且照片可以从php中的$ event ['photos']中访问?
SELECT e.title, e.eid, p.pid
FROM events e
RIGHT JOIN photos p ON p.aeid = e.eid
WHERE e.dateTimeStart >= $start_date_time AND e.dateTimeStart <= $end_date_time
答案 0 :(得分:2)
由于您使用的是MySql,因此您可以选择使用GROUP_CONCAT
聚合函数:
SELECT e.title, e.eid, GROUP_CONCAT(p.pid) AS pids
FROM events e
LEFT JOIN photos p ON p.aeid = e.eid
WHERE e.dateTimeStart >= $start_date_time AND e.dateTimeStart <= $end_date_time
GROUP BY e.title, e.eid
但是,请记住,在单个列中存储多个值会违反第一个正常格式...因此,在使用GROUP_CONCAT
函数之前,请根据您的其他问题进行权衡...并且永远不要存储你的数据是这种形式的。
另请注意,RIGHT JOIN
已更改为LEFT JOIN
...这不仅仅是出于原因的首选,我认为这是您想要的功能,因为events
是必填行,photos
可以是zero to many
。