A
AlexBHT
Задача такая: составить запрос, для выборки блогов из таблицы `blogs`, в которой имеется столбец `access`, значения которого обозначают следующее:
0 - блог доступен для всех
1 - блог доступен для всех пользователей
2 - блог доступен для всех друзей автора блога
3 - блог недоступен
Далее, имеется таблица `friends`, для определения по которой является ли пользователь другом другого пользователя используется такое условие:
/*например ID нашего аккаунта = 100, а ID аккаунта с которым нужно свериться = 200*/
((`friends`.`user`=200 AND `friends`.`friend`=100) OR (`friends`.`friend`=200 AND `friends`.`user`=100)) AND `friends`.`accepted`=1
Пояснение:
В таблице `friends` имеются столбцы `user` и `friend` в которых и находятся ID пользователей между которыми состоит дружба. Также, столбец `accepted` обозначает что дружба активна.
Я не силён в выборке из нескольких таблиц, т.к. не приходилось сталкиваться с этим, и не ознакомлен с должным функционалом MySQL для этой задачи. Исходя из этого я составил следующий запрос:
SELECT `blogs`.* FROM `blogs`,`friends` WHERE `blogs`.`access`<=1 OR (`blogs`.`access`=2 AND (((`friends`.`user`=`blogs`.`user` AND `friends`.`friend`=100) OR (`friends`.`friend`=`blogs`.`user` AND `friends`.`user`=100)) AND `friends`.`accepted`=1))
Запрос ориентирован на авторизованного пользователя, для гостей используется отдельный, с простой выборкой по `access`=0. Также, запрос выбирает среди всех блогов доступные для чтения именно нам (ID = 100)
Всё работает как нужно, но. Если в таблице `friends` имеется например 10 записей, то запрос делает выборку 10-ти одинаковых строк из таблицы `blogs`. Я понимаю, что по таблице идёт цикл и т.д, но незнаю как избавиться от такой проблемы.
В общем то цель вопроса какая: yзнать, как можно производить выборку из одной таблицы, сверяясь в некоторых условиях по второй. Т.к. по друзьям выборка идёт только при `access`=2, а в остальных случаях таблица `friends` не задействуется.
Если кто может, помогите пожалуйста, также можно предложить более скоростной вариант запроса. Заранее спасибо
0 - блог доступен для всех
1 - блог доступен для всех пользователей
2 - блог доступен для всех друзей автора блога
3 - блог недоступен
Далее, имеется таблица `friends`, для определения по которой является ли пользователь другом другого пользователя используется такое условие:
/*например ID нашего аккаунта = 100, а ID аккаунта с которым нужно свериться = 200*/
((`friends`.`user`=200 AND `friends`.`friend`=100) OR (`friends`.`friend`=200 AND `friends`.`user`=100)) AND `friends`.`accepted`=1
Пояснение:
В таблице `friends` имеются столбцы `user` и `friend` в которых и находятся ID пользователей между которыми состоит дружба. Также, столбец `accepted` обозначает что дружба активна.
Я не силён в выборке из нескольких таблиц, т.к. не приходилось сталкиваться с этим, и не ознакомлен с должным функционалом MySQL для этой задачи. Исходя из этого я составил следующий запрос:
SELECT `blogs`.* FROM `blogs`,`friends` WHERE `blogs`.`access`<=1 OR (`blogs`.`access`=2 AND (((`friends`.`user`=`blogs`.`user` AND `friends`.`friend`=100) OR (`friends`.`friend`=`blogs`.`user` AND `friends`.`user`=100)) AND `friends`.`accepted`=1))
Запрос ориентирован на авторизованного пользователя, для гостей используется отдельный, с простой выборкой по `access`=0. Также, запрос выбирает среди всех блогов доступные для чтения именно нам (ID = 100)
Всё работает как нужно, но. Если в таблице `friends` имеется например 10 записей, то запрос делает выборку 10-ти одинаковых строк из таблицы `blogs`. Я понимаю, что по таблице идёт цикл и т.д, но незнаю как избавиться от такой проблемы.
В общем то цель вопроса какая: yзнать, как можно производить выборку из одной таблицы, сверяясь в некоторых условиях по второй. Т.к. по друзьям выборка идёт только при `access`=2, а в остальных случаях таблица `friends` не задействуется.
Если кто может, помогите пожалуйста, также можно предложить более скоростной вариант запроса. Заранее спасибо