Всем доброго времени суток. Существует следующая, для меня, задача:
Есть таблица с NESTED SETS называется: itdo_access
CREATE TABLE `itdo_access` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`level` int(11) NOT NULL DEFAULT '0',
`l_key` int(11) NOT NULL DEFAULT '0',
`r_key` int(11) NOT NULL DEFAULT '0',
`display` text,
`name` text,
PRIMARY KEY (`id`),
KEY `l_key` (`l_key`,`r_key`,`level`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=cp1251
есть таблица с разрешениями к этим элементам itdo_bitaccess:
CREATE TABLE `itdo_bitaccess` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`access_bit` int(11) NOT NULL,
`id_group` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `id_group` (`id_group`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251
Так же имеется условие для itdo_bitaccess - id_group=2(допустим)
Необходимо склеить эти две таблицы и вывести дерево с таблицы itdo_access с указанными разрешениями для элемента дерева(itdo_bitaccess.acces_bit)
Примеры:
Таблица itdo_access
id level l_key r_key display name1 0 1 14 Показать портал onoff
10 1 2 11 Авторизация login
11 2 3 10 Настройка system_config
12 3 4 9 Управление доступом config_role
13 4 5 6 Добавить роль add_role
14 4 7 8 Изменить роль edit_role
15 1 12 13 Без авторизации notlogin
Таблица itdo_bitaccess
id name access_bit id_group1 onoff 1 1
2 onoff 1 2
Входное условие id_group=2
Выполняю запрос:
SELECT * FROM itdo_access left join itdo_bitaccess USING (`name`) ORDER BY l_key
name id level l_key r_key display id access_bit id_group
onoff 1 0 1 14 Показать портал 1 1 1
onoff 1 0 1 14 Показать портал 2 1 2
login 10 1 2 11 Авторизация NULL NULL NULL
system_config 11 2 3 10 Настройка NULL NULL NULL
config_role 12 3 4 9 Управление доступом NULL NULL NULL
add_role 13 4 5 6 Добавить роль NULL NULL NULL
edit_role 14 4 7 8 Изменить роль NULL NULL NULL
notlogin 15 1 12 13 Без авторизации NULL NULL NULL
Собственно если добавить в этот запрос WHERE id_group=2 то я получу только одну строку, но мне необходимо всё дерево, т.е. там где NULL тоже нужны
WHERE (id_group='NULL' and id_group=2)
выводит пустой результат
ПОмогите пожалуйсто разобраться в вопросе. Может вообще такой подход слишком муторный, может быть есть путь легче.