0

我有 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 中输​​出它?我试过这个,但一直收到一个未定义的错误“注意:未定义的索引: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";

您的问题很可能与您使用两个带有该字段的表这一事实有关,这就是为什么您应该使用 mysql子句id将它们选择为别名的原因。as

您可能还想考虑为您的字段使用命名约定并坚持下去。例如,查看 的理论Hungarian Notation,这将阻止此类问题的出现。

于 2010-04-14T06:59:08.720 回答