@lexander
Новичок
Помогите составить запрос
есть таблицы связей:
Админы
adm_mod // модов
adm_ver // версий
adm_prj // проектов
Соответствие каждого мода определённой версии
mod_ver
В таблице versions связь осуществляется по полю project_id, т.е. Уникальная версия может принадлежать только одному проекту.
Этот запрос вычисляет, является ли пользователь админом мода с достаточными полномочиями
[sql]
SELECT adm_mod.perm FROM `adm_mod`,`adm_ver`,`adm_prj`,`mod_ver`,`versions` WHERE mod_ver.mod = $id AND versions.id = mod_ver.ver AND ((adm_mod.mod = $id AND adm_mod.adm = {$portal->member['id']} AND adm_mod.perm >= $n) OR (adm_ver.ver = versions.id AND adm_ver.adm = {$portal->member['id']} AND adm_ver.perm >= $n) OR (adm_prj.prj = versions.project_id AND adm_prj.adm = {$portal->member['id']} AND adm_prj.perm >= $n))LIMIT 1
[/sql]
Если найдена хоть одна строка — всё ОК
Желательно вычислить уровень доступа пользователя с учетом того, что если он имеет полномочия уровня n на проект, то на версию и на мод полномочия не должны быть меньше n
Т.е. полномочия могут только расширяться. Другими словами нужно выбрать максимальное значение из perm со всех таблиц.
PS: Возможно есть кардинально другое решение проблемы
есть таблицы связей:
Админы
adm_mod // модов
adm_ver // версий
adm_prj // проектов
Соответствие каждого мода определённой версии
mod_ver
В таблице versions связь осуществляется по полю project_id, т.е. Уникальная версия может принадлежать только одному проекту.
Этот запрос вычисляет, является ли пользователь админом мода с достаточными полномочиями
[sql]
SELECT adm_mod.perm FROM `adm_mod`,`adm_ver`,`adm_prj`,`mod_ver`,`versions` WHERE mod_ver.mod = $id AND versions.id = mod_ver.ver AND ((adm_mod.mod = $id AND adm_mod.adm = {$portal->member['id']} AND adm_mod.perm >= $n) OR (adm_ver.ver = versions.id AND adm_ver.adm = {$portal->member['id']} AND adm_ver.perm >= $n) OR (adm_prj.prj = versions.project_id AND adm_prj.adm = {$portal->member['id']} AND adm_prj.perm >= $n))LIMIT 1
[/sql]
Если найдена хоть одна строка — всё ОК
Желательно вычислить уровень доступа пользователя с учетом того, что если он имеет полномочия уровня n на проект, то на версию и на мод полномочия не должны быть меньше n
Т.е. полномочия могут только расширяться. Другими словами нужно выбрать максимальное значение из perm со всех таблиц.
PS: Возможно есть кардинально другое решение проблемы