получение столбцов трех соединенных таблиц

#php #sql

#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 в…
в первой таблице (InvoiceItemTable) есть «цена».
echo $invoices[‘счет-фактура’];
В первой таблице есть счет-фактура (InvoiceItemTable), и он возвращает, что это работает
Я не хочу использовать $invoices[‘price’], потому что в третьей таблице тоже есть столбец ‘price’, и это то, что он возвращает, я хочу получить цену в первой таблице. $invoices[‘цена.InvoiceItemTable’] возвращает неопределенный индекс

Комментарии:

1. Какую СУБД вы используете?

2. Спасибо, ваш ответ сработал нормально…@ Хуан.

Ответ №1:

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']

Ответ №2:

В общем, гораздо лучше явно определять свои столбцы. При этом вы можете добавить конкретное имя к интересующему вас столбцу (или, наоборот, изменить имя того, который вы не хотите удалять двусмысленность)

Для примера я просто показываю столбцы, которые вы описали, но это выглядело бы примерно так.

 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';
  

Использование имен, подобных этому, требует больше работы, но изолирует ваш код от изменений и более явно показывает читателю, что возвращается.