Ребят, подскажите, пожалуйста, можно ли оптимизировать данный 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
- )
- )
- )