SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 20.04.2013 19:55:00

loorte
Участник
Зарегистрирован: 19.04.2013
Сообщений: 2

Помощь в SQL запросе

Всем доброго времени суток. Существует следующая, для меня, задача:
Есть таблица с 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                             name
1     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_group
1     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)
выводит пустой результат

ПОмогите пожалуйсто разобраться в вопросе. Может вообще такой подход слишком муторный, может быть есть путь легче.

Неактивен

 

#2 20.04.2013 21:36:33

loorte
Участник
Зарегистрирован: 19.04.2013
Сообщений: 2

Re: Помощь в SQL запросе

Вопрос решился:


SELECT * FROM itdo_access left join itdo_bitaccess USING (`name`) WHERE id_group=2 || id_group IS NULL ORDER BY l_key


Видимо надо было поспать, что бы понять очевидное )))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson