MySQL LEFT JOIN

时间:2012-12-10 20:29:37

标签: php mysql sql

  

可能重复:
  How to LEFT JOIN two tables with the same column name

我有这样的声明:

$sql = "SELECT * FROM deliveries AS del 
        LEFT JOIN job_sheet ON job_sheet.job_id=del.jID
        LEFT JOIN hierarchy AS h ON job_sheet.h_str=h.hID
        LEFT JOIN customers ON h.cust=customers.ID";

我的问题是'customers'表有一个名为ID的列,'deliveries'表也是如此。当我运行while循环输出结果时,问题就开始了。

while($data = mysql_fetch_array($sql))
{
     echo $data['ID'];
}

它输出已加入的最后一个表的值...如何将两者分开?我的意思是,我需要能够从两个表中输出“ID”,但在查询中,它是赢得的最后一个表。重命名列不是一个选项...

任何输入?

3 个答案:

答案 0 :(得分:2)

您需要显式调出列而不是使用*并在查询中使用相同名称的列别名:

SELECT 
   del.ID as delivery_id,
   customers.ID as customer_id,
   .....
FROM deliveries AS del 
LEFT JOIN job_sheet ON job_sheet.job_id=del.jID 
LEFT JOIN hierarchy AS h ON job_sheet.h_str=h.hID 
LEFT JOIN customers ON h.cust=customers.ID

答案 1 :(得分:1)

我想通过一些调整来解决这个问题:

    SELECT 
       deliveries.*, 
       job_sheet.*,
       customers.ID as CUSTOMERID
       FROM deliveries 
          LEFT JOIN job_sheet ON job_sheet.job_id=deliveries.jID 
          LEFT JOIN hierarchy ON job_sheet.h_str=hierarchy.hID 
          LEFT JOIN customers ON hierarchy.cust=customers.ID

鉴于我在customers表中唯一需要的是别名' ID'同时保留其他两个表中的其他列。

我的while循环最终会改为:

while($data = mysql_fetch_array($sql))
{
    echo $data['CUSTOMERID']; // For the customer's ID
    echo $data['ID']; // For the delivery ID
}

答案 2 :(得分:0)

您需要明确指定所需的列。就个人而言,我在选择列表中没有“*”这么大的问题,只要它是别名。类似的东西:

select del.*, job_sheet.col1, . . .