За последние 24 часа нас посетили 17555 программистов и 1724 робота. Сейчас ищут 1603 программиста ...

Обьеденение запросов LEFT/RIGHT JOIN

Тема в разделе "PHP и базы данных", создана пользователем bershadskij, 26 июл 2006.

  1. bershadskij

    bershadskij Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    17
    Симпатии:
    0
    Есть два запроса для совместной авторизации форума и сайта.
    Код (Text):
    1. SELECT session_user_id FROM forum_sessions WHERE session_id = $forum_sid AND session_logged_in=1
    2. SELECT username FROM forum_users WHERE user_id = '$zapros[session_user_id]'  AND user_active=1
    Как можно их обьеденить?
    Знаю что ето можно сделать обеденением LEFT/RIGHT JOIN но не могу разобратся как.
     
  2. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    эммм.... вопрос следующий.....
    в таблице forum_users есть пересекающиеся поля с таблицей forum_sessions

    откуда берутся переменные, подставляемые в запрос?
     
  3. bershadskij

    bershadskij Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    17
    Симпатии:
    0
    PHP:
    1. session_id = $forum_sid
    $forum_sid берется с куков

    PHP:
    1. user_id = '$zapros[session_user_id]'
    $zapros[session_user_id] результат с первого запроса


    Дело обстоит следующим образом:
    в куках хранится идентефикатор сиссии $forum_sid

    В таблице forum_sessions есть два поля session_user_id и session_id
    НУжно выбрать session_user_id по имеющемуся session_id
    (session_id известно из куки)

    Таким образом в результате первого запроса имеем идентификатор пользователя session_user_id

    А во втором запросе нужно с помощью етого идентификатора из таблицы forum_users выбрать поле username
    при котором user_id = '$zapros[session_user_id]' AND user_active=1

    где $zapros[session_user_id] - результат первого запроса

    Пересекающимися есть поля session_id

    АЛГОРИТМ
    1) по имеющемуся куку $forum_sid из таблицы forum_sessions выбрать значение поля session_user_id
    2) по полученому session_user_id из таблицы forum_users выбрать поле username
     
  4. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    SELECT a.session_user_id, b.username FROM forum_sessions AS a LEFT JOIN forum_users AS b ON (a.session_user_id=b.user_id) WHERE a.session_id = $forum_sid AND a.session_logged_in=1 AND b.user_active=1

    Должно поидее работать.... если я все правильно понял.....
     
  5. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    кстать, предлагаю перенести топик в рабдел "php и БД"
     
  6. bershadskij

    bershadskij Активный пользователь

    С нами с:
    25 июл 2006
    Сообщения:
    17
    Симпатии:
    0
    Vah, БААЛЬШУЩЕЕ СПАСИБО!!!