繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM