2016-10-21 5 views
-1

テーブルに入社.. 3のcolumsが、私は3つのテーブルを結合し、特定のテーブルのカラムを取得賭けはそれが唯一の第三表の列を参照してください、データセットをカウントすることができました

SELECT * 
FROM `InvoiceItemTable` a 
JOIN `InvoiceTable` b 
    ON (b.id = a.invoice) 
JOIN `products` c 
    ON (a.product = c.id) 
WHERE b.status='1' AND c.store = '2' 
//$invoices = $inginger->fetch(PDO::FETCH_ASSOC)) 
echo $invoices['a.price']; 

この価格リターンエラーが出ます:未定義インデックス:a.price in ... 最初のテーブル(InvoiceItemTable)に「価格」があります。 echo $請求書['請求書']; 最初のテーブル(InvoiceItemTable)に請求書があり、それが返されます 3番目のテーブルに '価格'列があり、それが返すものであるため、$請求書['価格']を使用したくありません。最初のテーブルで価格を取得します。 $ invoices ['price.InvoiceItemTable']は未定義のインデックスを返します

+1

を使用することができますが、$invoices['price'];

を使用する必要が$invoices['a.price'];を認識あなたは使っていますか? –

+0

ありがとうございます、あなたの答えは正常に働いた... @フアン。 – Ekumahost

答えて

3

PHPあなたが複数のテーブルで同じフィールド名を持っている場合は、別名

SELECT a.price as a_price, b.price as b_price, c.price as c_price 

を作成する必要があり、その後、あなたはDBMSである$invoices['a_price']

1

一般に、明示的に列を定義する方がはるかに優れています。そうすることで、興味のある列に特定の名前を追加することができます(逆に、あいまいさを除去しない名前を変更することもできます)。

例として、あなたは説明しましたが、それは何かのように見えます。このような命名行う

SELECT a.price as price, c.price as product_price 
FROM `InvoiceItemTable` a 
JOIN `InvoiceTable` b ON (b.id = a.invoice) 
JOIN `products` c ON (a.product = c.id) 
WHERE b.status='1' AND c.store = '2'; 

は、より多くの仕事ですが、変更からコードを隔離し、より明示的に返されているものを読者に示します。文句を言わない

関連する問題