Значения COUNT() неправильно умножаются после GROUP BY с несколькими соединениями JOIN, выполненными в приложении CodeIgPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Значения COUNT() неправильно умножаются после GROUP BY с несколькими соединениями JOIN, выполненными в приложении CodeIg

Сообщение Anonymous »

Я присоединяю три таблицы к родительской таблице, чтобы получить доступ к количеству записей для каждого курорта в каждой таблице. Я получаю неожиданный результат, который не могу объяснить.
Мои таблицы следующие:

Код: Выделить всё

CREATE TABLE `game_items` (
`id_items` int(11) NOT NULL,
`id_resort` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `game_items` (`id_items`, `id_resort`) VALUES
(36, 81),
(38, 81),
(39, 67);

CREATE TABLE `game_slopes` (
`id_slopes` int(11) NOT NULL,
`id_resort` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `game_slopes` (`id_slopes`, `id_resort`) VALUES
(16, 81);

CREATE TABLE `game_staff` (
`id_staff` int(11) NOT NULL,
`id_resort` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `game_staff` (`id_staff`, `id_resort`) VALUES
(1, 69),
(3, 67),
(5, 81),
(7, 81),
(8, 81),
(12, 81);

CREATE TABLE `game_resorts` (
`id_resort` int(11) NOT NULL,
`id_player` int(11) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `game_resorts` (`id_resort`, `id_player`) VALUES
(66, 59),
(67, 60),
(68, 61),
(69, 62),
(70, 63),
(81, 67),
(82, 68);
И мой запрос:

Код: Выделить всё

SELECT `game_players_tbl`.`id_player`,
`game_resorts`.`id_resort`,
COUNT(game_items_tbl.id_items) as item_count,
COUNT(game_slopes_tbl.id_slopes) as slope_count,
COUNT(game_staff_tbl.id_staff) as staff_count
FROM `game_resorts`
INNER JOIN `game_players` as `game_players_tbl` ON `game_resorts`.`id_player` = `game_players_tbl`.`id_player`
LEFT OUTER JOIN `game_items` as `game_items_tbl` ON `game_resorts`.`id_resort` = `game_items_tbl`.`id_resort`
LEFT OUTER JOIN `game_slopes` as `game_slopes_tbl` ON `game_resorts`.`id_resort` = `game_slopes_tbl`.`id_resort`
LEFT OUTER JOIN `game_staff` as `game_staff_tbl` ON `game_resorts`.`id_resort` =`game_staff_tbl`.`id_resort`
GROUP BY `game_resorts`.`id_resort`
ORDER BY `game_resorts`.`reputation` DESC
Результат:



id_player
id_resort
item_count
slope_count
staff_count




61
68
0
0
0


63
70
0
0
0


67
81
8
8
8


68
82
0
0
0


62
69
0
0
1


59
66
0
0
0


60
67
1
0
1



Но я бы ожидал:



id_player
id_resort
item_count
slope_count
staff_count




61
68
0
0
0


63
70
0
0
0


67
81
2
1
4


68
82
0
0
0


62
69
0
0
1


59
66
0
0
0


60
67
1
0
1



I не понимаю, почему я получаю 8 в каждом счетчике для идентификатора курорта 81. Я пробовал разные альтернативы, но так и не получил правильного результата.
Я выполняю этот запрос в проекте PHP/CodeIgniter, поэтому в идеале мне хотелось бы реализовать запрос с использованием методов построения запросов.

Подробнее здесь: https://stackoverflow.com/questions/433 ... -joins-exe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»