我能够连接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']返回未定义的索引
答案 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';
进行这样的命名工作更有效,但可以使代码与更改隔离,并更明确地向读者显示返回的内容。