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

标签 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

最佳答案

由于您使用的是 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/

相关文章:

php - 如何在显示之前正确显示 "clean"mysql 字符串?

php - 使用 Jquery 将 URL 变量传递给 PHPExcel

mysql - mysql 查询可以在 information_schema 崩溃表上完成吗?

mysql - 对于已知的其他几列,选择具有 MAX(列) 的一行,无需子查询

php - Azure网站+mysql

php - 更改我的 wp 模板中的评论标题

在 Ubuntu 上使用 Switch 出现 MySQL 用户权限错误

mysql - SQL - 使用非聚合表连接聚合表

java - Hibernate 'join' 获取奇怪的行为

mysql - MYSQL 语句中 WHERE 中的 SUM()