Несколько левых соединений, как вывести в php - PullRequest
0 голосов
/ 14 апреля 2010

У меня есть 3 таблицы, к которым нужно присоединиться. Таблица контрактов является основной таблицей, таблица «вакансии» и «компании» - это дополнительная информация, которая может быть связана с таблицей контрактов.

Итак, поскольку я хочу, чтобы все записи из моей таблицы «контрактов», а также данных «вакансий» и «компаний», только если они существуют, я написал запрос следующим образом ...

$sql = "SELECT * FROM contracts
        LEFT JOIN jobs ON contracts.job_id = jobs.id
        LEFT JOIN companies ON contracts.company_id = companies.id
        ORDER BY contracts.end_date";

Теперь, как бы я вывел это в PHP? Я пробовал это, но продолжал получать неопределенную ошибку "Примечание: неопределенный индекс: contract.id" ...

$sql_result = mysql_query($sql,$connection) or die ("Fail.");

if(mysql_num_rows($sql_result) > 0){

    while($row = mysql_fetch_array($sql_result))
    {
       $contract_id = stripslashes($row['contracts.id']);
       $job_number = stripslashes($row['jobs.job_number']);
       $company_name = stripslashes($row['companies.name']);
    ?>
        <tr id="<?=$contract_id?>">
           <td><?=$job_number?></td>
           <td><?=$company_name?></td>
        </tr>
    <?  
    }
}else{
    echo "No records found";
}

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 14 апреля 2010

Имена столбцов не будут иметь префикс, подобный этому - и с каждой таблицей, имеющей столбец с именем "id", у вас могут возникнуть проблемы. Вы должны явно указать столбцы, которые вы хотите вернуть, вместо использования «select *», а затем просто извлечь столбец по имени без префикса (например, $row['job_number']).

0 голосов
/ 14 апреля 2010

Ниже решит вашу проблему.

$sql = "SELECT contracts.id AS contract_id, jobs.job_number, companies.name FROM contracts
        LEFT JOIN jobs ON contracts.job_id = jobs.id
        LEFT JOIN companies ON contracts.company_id = companies.id
        ORDER BY contracts.end_date";

Ваша проблема, вероятно, будет решена тем, что вы используете две таблицы с полем id, поэтому вы должны выбрать их в качестве псевдонима, используя предложение mysql as.

Возможно, вы также захотите использовать соглашение об именах для ваших полей и придерживаться его. Например, ознакомьтесь с теорией Hungarian Notation, это предотвратит возникновение подобных проблем.

...