выбрать все роли у которых 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)
То есть сейчас я получаю
Нужно получать только роли( не знаю можно ли при джоинах убирать сразу приджоиненые табоицы) но ладно это не первой необходимости, ничего страшного.
Во вторых role_id =1(здесь для примера) - это модератор, а я пытаюсь по модератору взять только те роли чьи access в связанной таблице слабее модератора или равны модератору. То есть access'ов либо равно по количеству и они равны по значениям с access'ами той роли по которой я выбираю другие, либо их количество меньше, но их значения равны с теми access по роли которой я выбираю.То есть левых access быть не может.
то есть роль Moderator может содержать NewsModerator , SomeModerator ,но при этом NewsModerator не может взять SomeModerator (то есть отличного от news) . К примеру роль SuperAdmin ( т.к у него совпали со всеми access может выбрать всех других ролей)
Если выше написано очень карявоВыбрать все role где access равны access'ам данной роли по количеству и значениям, или количество access у данной роли больше чем у тех которые пытаемся выбрать но значения совпадают