是的,soulmerge 的解决方案还可以。但我需要一个查询,我必须从更多子表中收集数据,例如:
- 主表:会话(演示会话)(uid,名称,..)
- 第一个子表:带有 key session_id (uid, session_uid, date, time_start, time_end) 的事件
- 第二个子表:accessories_needed(笔记本电脑、投影仪、麦克风等),键为 session_id(uid、session_uid、accessory_name)
- 第三个子表:session_presenters(演示者),key为session_id(uid,session_uid,presenter_name,address...)
每个 Session 在子表中都有更多行(更多时间表,更多附件)
而且我需要为每个会话收集一个集合以显示在矿石行中(其中一些):
session_id | session_name | date | time_start | time_end | accessories | presenters
我的解决方案(经过数小时的实验):
SELECT sessions.uid, sessions.name,
,(SELECT GROUP_CONCAT( `events`.date SEPARATOR '</li><li>')
FROM `events`
WHERE `events`.session_id = sessions.uid ORDER BY `events`.date) AS date
,(SELECT GROUP_CONCAT( `events`.time_start SEPARATOR '</li><li>')
FROM `events`
WHERE `events`.session_id = sessions.uid ORDER BY `events`.date) AS time_start
,(SELECT GROUP_CONCAT( `events`.time_end SEPARATOR '</li><li>')
FROM `events`
WHERE `events`.session_id = sessions.uid ORDER BY `events`.date) AS time_end
,(SELECT GROUP_CONCAT( accessories.name SEPARATOR '</li><li>')
FROM accessories
WHERE accessories.session_id = sessions.uid ORDER BY accessories.name) AS accessories
,(SELECT GROUP_CONCAT( presenters.name SEPARATOR '</li><li>')
FROM presenters
WHERE presenters.session_id = sessions.uid ORDER BY presenters.name) AS presenters
FROM sessions
所以不需要 JOIN 或 GROUP BY。友好地显示数据的另一件有用的事情(当“回显”它们时):
- 您可以将 events.date、time_start、time_end 等包装在 "<UL><LI> ... </LI></UL>" 中,以便 "<LI></LI>" 在查询中用作分隔符将列表项中的结果分开。
我希望这可以帮助别人。干杯!