将许多记录聚合到第二个mysql表的每个结果中

时间:2013-03-11 19:22:21

标签: php mysql join

我有一个'事件'表和'照片'表。每个事件可能在“照片”表中包含零个或多个与其对应的记录。以下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

1 个答案:

答案 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