2011-01-11 51 views
1

所以我有一個查詢,我從「點」表中選擇,並使用計數的「頁」的數量外鍵MySQL的計數的多個外鍵

SELECT s_id, s_name, s_main_url, COUNT(p_id) AS numpages 
FROM sites 
INNER JOIN pages ON sites.s_id = pages.site_id 
GROUP BY pages.site_id 
ORDER BY s_id ASC 

我想另一個外鍵添加到算,可能不止一個,所以我嘗試了以下

SELECT s_id, s_name, s_main_url, COUNT(p_id) AS numpages, COUNT(l_id) AS numlinks 
FROM sites 
INNER JOIN pages ON sites.s_id = pages.site_id 
INNER JOIN links ON sites.s_id = links.site_id 
GROUP BY pages.site_id, links.site_id 
ORDER BY s_id ASC 

兩個NUMPAGES計數和numlinks是相同的,他們似乎成倍所有表結果,並給我一些巨大的數字,是不正確

有什麼建議嗎?

回答

4

您應該考慮使用子選擇而不是JOIN和GROUP BY。

SELECT s_id, s_name, s_main_url, numpages, numlinks 
FROM sites, 
(SELECT COUNT(p_id) as numpages FROM pages WHERE pages.site_id = sites.s_id) as cnt_pages, 
(SELECT COUNT(l_id) as numlink FROM links WHERE links.site_id = sites.s_id) as cnt_links 
ORDER BY s_id ASC 
+0

Thx回覆:)雖然這對大表不那麼有效嗎? – Horse 2011-01-11 16:23:24

0

得到了同樣的錯誤:內部查詢內外部查詢的表的「未知列」並以不同的方式解決:

SELECT s_id, s_name, s_main_url, numpages, numlinks, 
(SELECT COUNT(p_id) FROM pages WHERE pages.site_id = sites.s_id) as cnt_pages, 
(SELECT COUNT(l_id) FROM links WHERE links.site_id = sites.s_id) as cnt_links 
FROM sites, 
ORDER BY s_id ASC 

可能在某種程度上慢,但工程。