Помогите реализовать запрос по двум таблицам

Тема в разделе "SQL", создана пользователем AlexBHT, 12 янв 2010.

  1. AlexBHT

    AlexBHT New Member

    Регистрация:
    12 янв 2010
    Сообщения:
    1
    Симпатии:
    0
    Задача такая: составить запрос, для выборки блогов из таблицы `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` не задействуется.
    Если кто может, помогите пожалуйста, также можно предложить более скоростной вариант запроса. Заранее спасибо :)
     
  2. Aleksey

    Aleksey Гость

    Ну чтобы не парится (то есть это не лучшее, но самое простое решение :) ), добавь после SELECT такое волшебное слово DISTINCT:

    SELECT DISTINCT `blogs`.* FROM .....
     
Загрузка...

Поделиться этой страницей