MySQL считает несколько внешних ключей - PullRequest
1 голос
/ 11 января 2011

Итак, у меня есть запрос, в котором я выбираю из таблицы «сайты» и подсчитываю количество «страниц» с помощью внешнего ключа

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

Количество как чисел, так и чисел одинаково, и они, похоже, умножили результаты всех таблиц и дают мне какое-то огромное число, которое неверно

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 11 января 2011

Вы должны рассмотреть возможность использования подвыборов вместо 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 голосов
/ 14 сентября 2015

Получена та же ошибка: «Неизвестный столбец» таблицы внешнего запроса внутри внутреннего запроса и решается по-другому:

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

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

...