За последние 24 часа нас посетили 17727 программистов и 1618 роботов. Сейчас ищут 1660 программистов ...

Вывод из JOIN ON по 2 параметрам

Тема в разделе "MySQL", создана пользователем Alexxosipov, 29 янв 2017.

  1. Alexxosipov

    Alexxosipov Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    5
    Симпатии:
    0
    Ребят, всем привет. Ситуация следующая:
    Есть запрос к БД:
    PHP:
    1. SELECT * FROM workplaces
    2. JOIN users ON users.id = workplaces.u_id
    3. JOIN jobs ON jobs.id = workplaces.job_id
    4. WHERE workplaces.id = $id
    Он возвращает все правильно (синтаксис не учел, ибо пока что тестирую лишь в консоли mysql.
    Проблема тут в другом:
    В таблице workplaces есть столбец contract_id, который связан с users.id
    Как сделать запрос, чтобы он выводил не только
    JOIN users ON users.id = workplaces.u_id, но еще и
    JOIN users ON users.id = workplaces.contract_id

    Т.е. запрос (заведомо знаю, что неправильный, просто показать логику того, что мне нужно) выглядит примерно так:
    PHP:
    1. SELECT * FROM workplaces
    2. JOIN users ON users.id = workplaces.u_id, workplaces.contract_id
    3. JOIN jobs ON jobs.id = workplaces.job_id
    4. WHERE workplaces.id = $id
    Заранее спасибо! А то уже весь инет обошел кругами, не могу разобраться все равно(
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Код (Text):
    1. JOIN users ON users.id = workplaces.u_id AND  users.id = workplaces.contract_id
     
  3. Alexxosipov

    Alexxosipov Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    5
    Симпатии:
    0
    Нет, это, к сожалению, не то.
    Запрос, который ты написал, ищет совпадения в 1 строке в таблице users, т.е. ищет строку, где users.id будет равен workplaces.u_id и workplaces.contract_id

    А строки
    users.id = workplaces.u_id
    users.id = workplaces.contract_id
    это 2 разные строки, которые выводят данные из таблицы users. Т.е. выведут данные о пользователях u_id и contract_id
     
  4. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    OR вместо AND. Но это не хорошо уже. Убедитесь что индексы задействуются. Если нет (а скорее всего нет), то вероятно будет оптимальнее сделать 2 запроса через Union с разными условиями на join. И да, это опять же всё равно говорит о неграмотно проработанной структуре данных.
     
    denis01 нравится это.
  5. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Код (Text):
    1. JOIN users ON users.id = workplaces.u_id
    2. JOIN users users_cont ON users_cont.id = workplaces.contract_id