我有一个“事件”表和“照片”表。每个事件在“照片”表中可能有零个或多个对应的记录。以下 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
函数之前权衡一下您的其他顾虑...永远不要store 您在此表单中的数据。
另外,请注意 RIGHT JOIN
更改为 LEFT JOIN
... 这不仅是出于美观原因的首选,我认为这是您想要的功能因为 events
是必需的行,而 photos
可以是零到多
。
关于php - 将许多记录聚合到第二个 mysql 表的每个结果中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346824/