Несколько COUNT() + JOIN = одинаковые значения?

Есть выборка из базы, в которой делается JOIN двух разных таблиц, по этим двум таблицам делается COUNT().

Дело в том, что оба этих каунта почему-то имеют абсолютно одинаковое значение.

Пример запроса:
SELECT
			`t`.`id`,`t`.`title`,
			COUNT(`r`.`id`) AS `rcnt`,
			COUNT(`f`.`id`) AS `fcnt`
	FROM
			`table` AS `t`
	LEFT JOIN
			`rtable` AS `r` ON `t`.`id` = `r`.`r_id`
	LEFT JOIN
			`ftable` AS `f` ON `f`.`w_id` = `t`.`w_id`
	GROUP BY
			`t`.`id`



(изменил имена полей, отсюда может быть не совсем верный запрос, но суть должна быть понятна)

После чего rcnt и fcnt имеют одинаковое значение по непонятной причине.

Может кто-нибудь знает почему так и как этого избежать?
  • Вопрос задан
  • 6479 просмотров
Решения вопроса 1
Ogra
@Ogra
Попробуйте COUNT(DISTINCT r.id).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
wartur
@wartur
Ну так при JOIN, строк то и там и там одинаковое, значит COUNT работает правильно.

Нужно сделать 2 подзапроса отдельно к каждой таблице в этом участке кода COUNT(`r`.`id`) AS `rcnt`. Ну если я правильно понял задачу.
Ответ написан
igofed
@igofed
В результате запроса у вас получится всего N строк. Соответственно каждый COUNT вернет число N, т.к. COUNT учитывает и значения NULL.
Можно поменять ваш запрос на:
SELECT `t`.`id`,`t`.`title`, (select COUNT(`id`) from rtable) AS `rcnt`, (select COUNT(`id`) from ftable) AS `fcnt`,
и бла бла бла
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы