Духовность™
Продвинутый новичок
помогите с запросом
Ситуация такая: есть две таблицы, actions и controllers - они связаны между собой.
Есть таблица связи groups_actions, которая имеет такой вид:
[sql]
CREATE TABLE `group_action` (
`id_group` smallint(5) unsigned NOT NULL,
`id_action` smallint(5) unsigned NOT NULL,
`access` tinyint(1) unsigned NOT NULL,
UNIQUE KEY `ga_unique` (`id_group`,`id_action`)
)
[/sql]
Дело в том, что нужно написать запрос, который получит кроме информации о контроллерах/действиях и значение group_action.access, которое либо будет в результате со значением 1, если группа существует, и со значением 0 если группы нет.
Я написал такой запрос:
[sql]SELECT `action`.*, `action`.`id` as id_action, `controller`.*, IFNULL(`group_action`.`access`, 0) as access FROM `controller` INNER JOIN `action` ON `controller`.`id` = `action`.`id_controller` LEFT JOIN `group_action` ON `group_action`.`id_action` = `action`.`id` AND `group_action`.`id_group` = 0[/sql]
но он мне не нравится. Плохой Explain получается
хотя необходимые индексы проставлены. Плюс ко всему мне не нравится условие в последнем Joine: [sql]AND group_action.id_group = 0[/sql]
Вот, хочется как-то оптимизировать, но пока я ума не приложу, как это сделать.
Ситуация такая: есть две таблицы, actions и controllers - они связаны между собой.
Есть таблица связи groups_actions, которая имеет такой вид:
[sql]
CREATE TABLE `group_action` (
`id_group` smallint(5) unsigned NOT NULL,
`id_action` smallint(5) unsigned NOT NULL,
`access` tinyint(1) unsigned NOT NULL,
UNIQUE KEY `ga_unique` (`id_group`,`id_action`)
)
[/sql]
Дело в том, что нужно написать запрос, который получит кроме информации о контроллерах/действиях и значение group_action.access, которое либо будет в результате со значением 1, если группа существует, и со значением 0 если группы нет.
Я написал такой запрос:
[sql]SELECT `action`.*, `action`.`id` as id_action, `controller`.*, IFNULL(`group_action`.`access`, 0) as access FROM `controller` INNER JOIN `action` ON `controller`.`id` = `action`.`id_controller` LEFT JOIN `group_action` ON `group_action`.`id_action` = `action`.`id` AND `group_action`.`id_group` = 0[/sql]
но он мне не нравится. Плохой Explain получается
PHP:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE controller ALL PRIMARY NULL NULL NULL 3
1 SIMPLE action ALL NULL NULL NULL NULL 6 Using where
1 SIMPLE group_action eq_ref ga_unique ga_unique 4 const,cms.action.id 1
Вот, хочется как-то оптимизировать, но пока я ума не приложу, как это сделать.