2011-01-11 1 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

+0

Нет, внутренне версия JOIN и версия подзапроса работают точно так же. Вы можете переписать первый запрос в версию подзапроса и сравнить их с командой EXPLAIN. http://dev.mysql.com/doc/refman/5.5/en/using-explain.html – vartec

+0

Замечательно, спасибо за помощь :) – Horse

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 

Это может быть как-то медленно, но работает.