Я присоединяю три таблицы к родительской таблице, чтобы получить доступ к количеству записей для каждого курорта в каждой таблице. Я получаю неожиданный результат, который не могу объяснить.
Мои таблицы следующие:
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
I не понимаю, почему я получаю 8 в каждом счетчике для идентификатора курорта 81. Я пробовал разные альтернативы, но так и не получил правильного результата.
Я выполняю этот запрос в проекте PHP/CodeIgniter, поэтому в идеале мне хотелось бы реализовать запрос с использованием методов построения запросов.
Я присоединяю три таблицы к родительской таблице, чтобы получить доступ к количеству записей для каждого курорта в каждой таблице. Я получаю неожиданный результат, который не могу объяснить. Мои таблицы следующие: [code]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_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); [/code] И мой запрос: [code] 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 [/code] Результат:
I не понимаю, почему я получаю 8 в каждом счетчике для идентификатора курорта 81. Я пробовал разные альтернативы, но так и не получил правильного результата. Я выполняю этот запрос в проекте PHP/CodeIgniter, поэтому в идеале мне хотелось бы реализовать запрос с использованием методов построения запросов.