2012-02-04 18 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

相關問題