Php MySQL左连接
可能重复:Php MySQL左连接,php,mysql,sql,Php,Mysql,Sql,可能重复: 我有以下声明: $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的列
我有以下声明:
$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”表也有一个名为ID的列。当我运行while循环以输出结果时,问题就开始了
while($data = mysql_fetch_array($sql))
{
echo $data['ID'];
}
它输出最后一个联接的表的值。。。我怎样才能把两者分开呢?我的意思是,我需要能够从两个表中输出'ID',但在查询中,最后一个表获胜。重命名列不是一个选项
任何输入?您需要显式调用列,而不是使用
*
并在查询中使用相同名称的列别名:
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
您需要显式指定所需的列。就我个人而言,我对选择列表中的“*”没有太大问题,只要它是别名。比如:
select del.*, job_sheet.col1, . . .
我通过一些调整找到了答案:
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
}
决不要在联接查询中选择*。始终明确显示
SELECT
列表中的列,并指定别名:SELECT h.ID作为h\u ID,del.ID作为del\u ID
到目前为止,我已经尝试过了,效果很好。我的下一个问题是,如果您需要该表中的所有30列,该怎么办。你必须把每一个都写出来吗?@Dimitri-最好的做法是,把所有30个都列出来。或者,您可以列出需要使用别名的名称,然后使用*
进行后续操作。这将导致某些列被多次选中(可能不是什么大问题),谢谢!我对你的例子做了一些调整,效果很好!