我已经尝试过一些以前的答案,但是它们没有多大意义。
我有两个表,“组”之一代表现实世界中的人群,而“事件”之一代表该组的会议。
我有一个非常简单的查询,用于选择组,以将其显示在网站上的列表中,以及在组配置文件页面上的单独查询,其中列出了即将举行的会议,我不确定要使用哪种技术来添加会议“下一次会议”到组列表,理想情况下,它需要作为MySQL查询中的另一列返回。
之前我对联接很好,但是在第一个表的每行中将联接结果的数量限制为一个,这似乎并不简单。
关于哪种技术可以证明这一点的任何简单建议?
谢谢!
粗略的架构如下:
CREATE TABLE `groups` (
`id` varchar(12) NOT NULL,
`title` varchar(30) NOT NULL,
PRIMARY KEY (`slug`)
)
CREATE TABLE `events` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`group` varchar(20) NOT NULL,
`title` varchar(50) NOT NULL,
`start` datetime NOT NULL,
`finish` datetime NOT NULL,
PRIMARY KEY (`id`)
)
最佳答案
您提供的架构不一致,并且您未提供查询...
为了给出某种答案,我假设groups.id = events.group
。
要显示下一个事件,您可以执行以下操作:
SELECT G.*, M.EVENT FROM GROUPS G LEFT JOIN
(
SELECT X.GROUP, MIN ( X.ID ) EVENT
FROM EVENTS X
INNER JOIN (SELECT E.GROUP G, MIN ( E.START ) S FROM EVENTS E WHERE E.START > NOW() GROUP BY E.GROUP) Y
ON X.GROUP = Y.G AND X.START = Y.S
GROUP BY X.GROUP
) M ON G.ID = M.GROUP