1

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

1 回答 1

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.

于 2013-03-11T19:37:04.833 回答