我已经尝试过以前的一些答案,但它们并没有多大意义。
我有两个表,一个代表现实世界人群的“团体”,以及一个代表团体会议的“事件”。
我有一个非常简单的查询,可以选择组,在网站列表中显示它们,以及在列出他们即将召开的会议的组个人资料页面上的单独查询,我不确定使用什么技术要将“下一次会议”添加到组列表中,理想情况下需要将其作为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`)
)
答案 0 :(得分:0)
好的,这是技术答案,而不是解决方案:-)
此代码从子表中为每个父行选择每两行,按sort
列排序。
SELECT
parent.id, parent.name,
c1.id, c1.name
FROM parent
JOIN child c1 ON c1.parent_id = parent.id
LEFT JOIN child c2 ON c2.parent_id = c1.parent_id AND c2.sort < c1.sort
GROUP BY parent.id, parent.name, c1.id, c1.name
HAVING COUNT(c2.id) < 2
ORDER BY parent.name;
采取from here。
答案 1 :(得分:0)
您提供的架构不一致且您未提供查询...
为了给出某种答案,我假设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