Задать вопрос
gleber1
@gleber1

Возможно ли сделать вообще такой запрос на Mysql?

выбрать все роли у которых access равны access у выбранной роли или ( access'ов меньше но при этом равны, других нет)
select * from roles 
left join roles_routes 
on roles.id = roles_routes.role_id 
where roles_routes.access  in (select access from roles_routes where role_id=1)

То есть сейчас я получаю f6b4490f41c743fa816be336f0c1d657.png
Нужно получать только роли( не знаю можно ли при джоинах убирать сразу приджоиненые табоицы) но ладно это не первой необходимости, ничего страшного.
Во вторых role_id =1(здесь для примера) - это модератор, а я пытаюсь по модератору взять только те роли чьи access в связанной таблице слабее модератора или равны модератору. То есть access'ов либо равно по количеству и они равны по значениям с access'ами той роли по которой я выбираю другие, либо их количество меньше, но их значения равны с теми access по роли которой я выбираю.То есть левых access быть не может.
то есть роль Moderator может содержать NewsModerator , SomeModerator ,но при этом NewsModerator не может взять SomeModerator (то есть отличного от news) . К примеру роль SuperAdmin ( т.к у него совпали со всеми access может выбрать всех других ролей)
Если выше написано очень каряво
Выбрать все role где access равны access'ам данной роли по количеству и значениям, или количество access у данной роли больше чем у тех которые пытаемся выбрать но значения совпадают
  • Вопрос задан
  • 289 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
grigruss
@grigruss
Мне вообще плевать на ИТ, спецов и без меня хватае
... where roles_routes.access  in (select access from roles_routes where role_id=1)

Судя по этому куску получаются грабли... Я обычно сначала делаю запрос, чтобы получить access, а потом уже, имея точное и четкое значение, задаю запрос на список. То есть что-то вроде этого:
SELECT `access`,`другое_нужное_поле` FROM `roles_routes` WHERE `role_id`=1

и потом
SELECT * FROM `roles` LEFT JOIN `roles_routes` ON `roles.id` = `roles_routes`.`role_id` WHERE `roles_routes`.`access`=`результат_первого_запроса`.`access` OR (`roles_routes`.`access`>`результат_первого_запроса`.`access` AND `roles_routes`.`нужное_поле`=`результат_первого_запроса`.`другое_нужное_поле`)

но я все это делаю в PHP, поэтому и значения могу из первого запроса подставлять как угодно...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ничего не понял. что такое
нужно как то добавить условие только чтобы если access левые есть то не брать role
?
еще лучше приведите вывод DESC roles_routes и DESC roles с примером данных, что выводит Ваш скрипт и что хотите получить
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы