2

重複の可能性:
同じ列名を持つ2つのテーブルを左結合する方法

私はこの声明を持っています:

$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'];
}

最後に結合されたテーブルの値を出力します...2つを分離するにはどうすればよいですか?つまり、両方のテーブルから「ID」を出力できる必要がありますが、クエリでは、これが最後のテーブルになります。列の名前を変更することはオプションではありません...

入力はありますか?

4

3 に答える 3

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
于 2012-12-10T20:34:19.673 に答える
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

顧客テーブルから必要なのは、他の2つのテーブルから1つおきの列を保持しながら、エイリアス化された「ID」だけでした。

私のwhileループは、最終的に次のように変更されます。

while($data = mysql_fetch_array($sql))
{
    echo $data['CUSTOMERID']; // For the customer's ID
    echo $data['ID']; // For the delivery ID
}
于 2012-12-10T20:59:35.990 に答える
0

You need to explicitly specify the columns you want. Personally, I don't have such a big problem with "*" in a select list, so long as it is aliased. Something like:

select del.*, job_sheet.col1, . . .
于 2012-12-10T20:34:47.507 に答える