我有这样的声明:
$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”,但在查询中,它是赢得的最后一个表。重命名列不是一个选项...
任何输入?
答案 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, . . .