2012-02-04 76 views
1

我已经尝试了解以前的一些答案,但它们没有很多意义。从主表的每行中选择连接表中的单个行

我有两个表格,代表现实世界人群的“组”之一,以及代表该组的会议的“事件”之一。

我有一个非常简单的查询,选择组,在网站上的列表中显示它们,以及在列出他们即将召开的会议的组概况页面上的单独查询,并且我不确定使用什么技术用于将“下次会议”添加到组列表中,理想情况下它需要作为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`) 
) 
+1

得到你需要显示表的结构,你已经得到了查询工作的答案! – Yahia 2012-02-04 20:16:22

+0

如果您发布了一些模式定义,这会更容易。 – 2012-02-04 20:17:18

+0

我问过一种技术,不是有人为我做,但现在我要添加一个 – 2012-02-04 20:18:48

回答

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

相关问题