MySQL Forums
Forum List  »  Russian

Помогите реализовать запрос по двум таблицам
Posted by: Alex BHT
Date: January 09, 2010 07:51AM

Задача такая: составить запрос, для выборки блогов из таблицы `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`. Я понимаю, что по таблице идёт цикл и т.д, но незнаю как избавиться от такой проблемы. Если кто может, помогите пожалуйста, также можно предложить более скоростной вариант запроса. Заранее спасибо :)

Options: ReplyQuote


Subject
Views
Written By
Posted
Помогите реализовать запрос по двум таблицам
6432
January 09, 2010 07:51AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.