Знаю что тут есть знающие люди.
Ребят, подскажите, пожалуйста, можно ли оптимизировать данный SQL-код, хотя сейчас он показывает неплохую производительность, но такая вложенность удручает.
В документе тот же код, что и на скриншоте.
Таблицы, участвующие в этой оргии:
route - роутинг
route_permission, group_permission, user_group, user_permission - связующие таблицы.
Данный код выбирает пути роутинга, разрешенные для конкретного пользователя(user), в зависимости от принадлежности к группе(group) и наличия соответствующих прав(permission).
CODE ( SQL):
скопировать код в буфер обмена
SELECT * FROM `route` WHERE `id` IN ( SELECT `route_id` FROM `route_permission` WHERE `permission_id` IN ( SELECT `permission_id` FROM `group_permission` WHERE `group_id` IN ( SELECT `group_id` FROM `user_group` WHERE `user_id` =1 ) UNION ( SELECT permission_id FROM user_permission WHERE `user_id` =1 ) ) )
Прикреплено изображение (Нажмите для увеличения)
|