MySQL 3.23. Вывих мозга при создании запроса
Имею хотение натворить красивость, но не имею мозгов. Надеюсь на Ваши.
Суть: Есть юзера. Есть группы(Роли), в которые можно объединять юзеров. Каждый юзер может входить в любое количество групп или не входить ни в одну. Есть куча файлов. Надо прописать права на файлы для юзеров и/или групп. Натворил таблицы: users: поля: id (primary key) ................. groups: поля: id (primary key) ....... usgr: (связи юзеров и групп) поля: id_user id_group files: поля: id (primary key) ............................ permit_users: (связи файлов с юзерами. Иными словами права юзеров на файл) поля: id_user id_file permit_groups: (связи файлов с группами. Иными словами права групп юзеров на файл) поля: id_group id_file Вопрос: Как одним запросом по id файла определить доступен ли он данному юзеру? (по id юзера) |
Цитата:
SELECT * from permit_users WHERE id_file='$file' AND id_user='$user' |
vadimiron Юзер может состоять в группе, для которой прописаны разрешения в permit_grops. Я выполняю два запроса:
$res=SELECT permit_group.gr FROM permit_group,usergroup WHERE (permit_group.gr=usergroup.gr) AND (permit_group.file=$file_id) AND (usergroup.us=$userid); $res2=SELECT user FROM permit_user WHERE (user=$userid) AND (file='$fileid); Потом проверяю, если есть хоть одна строка результата хотя бы в одном запросе, значит файлик разрешен, иначе нет: if( (mysql_num_rows($res)+mysql_num_rows($res2))>0 ) echo"разрешен"; else echo"нафик"; Но мне не нравится. не красиво. Как обойтись одним запросом? |
например, UNION первого запроса со вторым. можно с группировкой по user_id, чтоб не тащить лишнего
|
Цитата:
Я не знаю точно поддерживает ли третья ветка вложенные запросы, то можно вложенным Возможно есть ошибки, так как давно этим не занимался: PHP код:
|
Время: 21:52. |
Время: 21:52.
© OSzone.net 2001-