У меня есть небольшая проблема, чтобы сделать рекурсивный запрос, и я не могу извлечь нужные мне данные.запрос рекурсивный и другие таблицы в postgresql?
У меня есть 3 таблицы (меню, type_role, привилегии)
menu ---------------------------------------------------------- | id| parent_id | tittle | controller | action | | 1 | | Users | | | | 2 | 1 | Create User | users | create | | 3 | 1 | Edit User | users | edit | | 4 | 1 | Show Users | users | show | | 5 | | Contacts | | | | 6 | 5 | Create Contacs | contacts | create | | 7 | 5 | Edit Contacts | contacts | edit | | 8 | | Inventory | | | | 9 | 8 | Register Piece | pieces | register | | 10| 8 | Show Pieces | pieces | show |
type_role --------------------- | id| role | | 1 | Administrator | | 2 | Technical | | 3 | Operator |
privilege --------------------- | role_id | menu_id | | 1 | 2 | | 1 | 3 | | 1 | 4 | | 1 | 6 | | 1 | 7 | | 1 | 9 | | 1 | 10 | | 2 | 9 | | 2 | 10 | | 3 | 6 | | 3 | 7 | | 3 | 10 |
Мне нужно извлечь:
ID, parent_id, контроллер, действие которой идентификатор типа Роль равна 1
Я сделал запрос, и я получу данные, но запрос выведет его родителей, которые не связаны с типом o f, и мне это не нужно.
Я просто хочу, чтобы извлечь все пункты меню и их родителей по типу пользователя
SELECT menu.id,menu.parent_id,menu.controller,menu.action
FROM privilege
INNER JOIN menu ON
menu.id = privilege.menu_id
INNER JOIN type_role ON
type_role.id = privilege.role_id
WHERE type_role.id = 1
UNION
SELECT menu_recur.id,menu_recur.parent_id,menu_recur.menu_recur,menu_recur.action
FROM menu menu_recur
INNER JOIN menu menutwo ON
menu_recur.id = menutwo.parent_id
Я думаю, что я должен использовать рекурсивные, но я не работал с такого рода рекурсивных запросов
WOW .... спасибо вам большое за помощь .. Вы решили мою проблему –