0

参加する必要のあるテーブルが3つあります。契約テーブルはメインテーブルであり、「ジョブ」テーブルと「会社」テーブルは、契約テーブルに関連付けることができる追加情報です。

したがって、「contracts」テーブルのすべてのエントリと、「jobs」および「companies」データが存在する場合にのみ必要なので、次のようにクエリを作成しました。

$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でどのように出力しますか?これを試しましたが、「通知:未定義のインデックス:contracts.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";
}

どんな助けでも大歓迎です。

4

2 に答える 2

1

列名にはこのように接頭辞が付けられません。各テーブルに「id」という列があると、問題が発生する可能性があります。「select*」を使用するのではなく、返す列を明示的に識別する必要があります。その後、接頭辞なしの名前で列を取得します(例$row['job_number'])。

于 2010-04-14T06:49:08.953 に答える
0

以下はあなたの問題を解決するでしょう。

$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";

あなたの問題は、フィールドで2つのテーブルを使用しているという事実に気付く可能性があります。そのため、mysql句idを使用してそれらをエイリアスとして選択する必要があります。as

また、フィールドに命名規則を使用し、それに固執することを検討することもできます。たとえば、の理論を確認してください。これによりHungarian Notation、このような問題が発生するのを防ぐことができます。

于 2010-04-14T06:59:08.720 に答える