Советы о том, как завершить конкретные MySQL JOIN - PullRequest
0 голосов
/ 11 июня 2010

У меня есть таблица mysql jobs.

Это базовая структура jobs.

id
booked_user_id
assigned_user_id

У меня также есть другая таблица, meta.

Мета имеет структуру:

id
user_id
first_name
last_name

Вот мой php-код

$sQuery = "
        SELECT SQL_CALC_FOUND_ROWS job_id, job_name, priority_id, meta.first_name, date_booked
        FROM jobs
        LEFT JOIN (meta) on (meta.user_id = jobs.booked_user_id)
        LEFT JOIN (jobs_priorities) on (jobs_priorities.id = jobs.priority_id)
        $sWhere
        $sOrder
        $sLimit
    ";
    $rResult = mysql_query($sQuery);

    while ( $aRow = mysql_fetch_assoc( $rResult ) )
    {
        $sOutput .= '"'.addslashes($aRow['job_id']).'",';
    }

Как я могу присоединиться к этим таблицам, чтобы booked_user_id и assigned_user_id могли получить доступmeta.first_name?

Когда я пытаюсь

$sOutput .= '"'.addslashes($aRow['first_name']).'", 

ничего не происходит

Спасибо за ваш совет

Тим

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Вы можете присоединиться дважды:

SELECT j.id, b.first_name, a.first_name
FROM jobs j
JOIN meta b ON j.booked_user_id = b.user_id
JOIN meta a ON j.assigned_user_id = a.user_id
1 голос
/ 11 июня 2010

Натан сделал исправление, но применит его к вашему текущему SQL, чтобы вы могли понять его подробнее

Позволяет преобразовать ваш запрос в следующее:

    SELECT SQL_CALC_FOUND_ROWS job_id, job_name, priority_id, date_booked
    FROM jobs j
    LEFT JOIN meta b ON b.user_id = j.booked_user_id
    LEFT JOIN meta a ON a.user_id = j.assigned_user_id
    LEFT JOIN jobs_priorities jp ON jp.id = j.priority_id
    $sWhere
    $sOrder
    $sLimit

Что я сделал, так это использовалПсевдоним метода и присоединение дважды к мета (точно так же, как это сделал Натан), я временно удалил поле first_name,

Затем давайте добавим что-то в SELECT, чтобы вы могли отображать оба first_name

    SELECT SQL_CALC_FOUND_ROWS job_id, job_name, priority_id, date_booked, b.first_name as booked_first_name, a.first_name as assigned_first_name
    FROM jobs j
    LEFT JOIN meta b ON b.user_id = j.booked_user_id
    LEFT JOIN meta a ON a.user_id = j.assigned_user_id
    LEFT JOIN jobs_priorities jp ON jp.id = j.priority_id
    $sWhere
    $sOrder
    $sLimit

Теперь мы добавили столбец booked_first_name и assign_first_name, теперь вы можете вызывать его в своем php-коде следующим образом:

$ aRow ['booked_first_name'] или $ aRow ['assign_first_name']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...