[英]Aggregate many records into each result from a second mysql table
我有一个“事件”表和“照片”表。 每个事件在“照片”表中可能有零个或许多与其对应的记录。 下面的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
由于使用的是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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.