得到三个连接表的列

时间:2016-10-21 14:46:10

标签: php sql

我能够连接3个表并计算数据集,下注获取特定表上的列只看到第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 $发票[' invoice']; 第一个表(InvoiceItemTable)中有发票,它返回它的工作原理 我不想使用$发票['价格'],因为有'价格'第三个表中的列也是它返回的,我想在第一个表中得到价格。 $ invoices [' price.InvoiceItemTable']返回未定义的索引

2 个答案:

答案 0 :(得分:3)

php不会识别$invoices['a.price'];你必须使用$invoices['price'];

如果您在多个表中具有相同的字段名,则必须创建别名

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

然后您可以使用$invoices['a_price']

答案 1 :(得分: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';

进行这样的命名工作更有效,但可以使代码与更改隔离,并更明确地向读者显示返回的内容。