Множественные соединения MySQL — как мне отобразить данные? (используя PHP)

#php #mysql #join

#php #mysql #Присоединиться

Вопрос:

Хорошо, я знаю, что это глупо, но я застрял, и мне нужен пинок по голове. У меня есть 3 таблицы (orders, orderitems, products), и я использую 2 левых внешних соединения в запросе для отображения истории заказов в разделе клиенты:

 SELECT * FROM orderitems oi, orders o
LEFT OUTER JOIN product p ON p.dbarcode = oi.orderitems_item
WHERE o.order_code = oi.orderitems_ordercode 
    AND oi.orderitems_ordercode = '".$_GET['ordercode']."'` 
  

Я могу отобразить строку для каждого продукта в таблице order_items, но, похоже, я не могу отобразить (echo) общую сумму, которая хранится в поле orders.order_amount, я полагаю, это связано с тем фактом, что поле имеет несколько экземпляров или что-то еще. Как мне отобразить данные в результате объединения нескольких таблиц?

Редактировать для Quassnoi:

Я перебираю результаты и создаю строку таблицы для каждого из них, и после цикла я хочу отобразить общий итог:

   <? do { ?>
  <tr>
    <td><? echo $row_OrderItems['dbarcode']; ?></td>
    <td><? echo $row_OrderItems['name']; ?></td>
    <td><? echo $row_OrderItems['orderitems_quantity']; ?></td>
    <td><? echo $row_OrderItems['price']; ?></td>
  </tr>
  <? } while ($row_OrderItems = mysql_fetch_assoc($OrderItems)); ?>

  <tr>
    <td colspan="5">Total order amount (incl. shipping and handling): amp;euro; <? echo $row_OrderItems['order_amounteuro']; ?></td>
  </tr>
  

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

1. Помогло бы добавление o.order_amount AS order_amount в SELECT?

2. вам нужно сохранить итоговое значение до завершения цикла while.

3. Да, я понял, что причина, по которой я не могу отобразить итоговое значение, заключается в том, что оно находится вне цикла, однако мне нужно отобразить его там, а не внутри повторяющейся области. Есть идеи?

4. смотрите мой ответ ниже, я обновил его

Ответ №1:

o.order_amount будет повторяться в каждой строке, просто возьмите первую.

И, конечно, никогда не используйте это:

 oi.orderitems_ordercode = '".$_GET['ordercode']."'` 
  

без mysql_real_escape_string .

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

1. Да, я очищаю входные данные, я просто использовал приведенное выше в качестве примера! Хотя мне понравился мультфильм! 🙂

2. Забыл спросить, однако, КАК мне отобразить только первый экземпляр? Если я просто повторяю поле, т. Е. echo $row_orderinfo (‘order_amout’), оно ничего не показывает, хотя данные были извлечены (я могу видеть это с помощью print_r)

3. @bikey77: пожалуйста, опубликуйте пример вашего кода (в качестве обновления к вашему исходному сообщению)

Ответ №2:

 <? do { ?>
  <tr>
    <td><? echo $row_OrderItems['dbarcode']; ?></td>
    <td><? echo $row_OrderItems['name']; ?></td>
    <td><? echo $row_OrderItems['orderitems_quantity']; ?></td>
    <td><? echo $row_OrderItems['price']; ?></td>
  </tr>
  <? 
$total = $row_OrderItems['order_amounteuro']; // store the total, before you loop past the last row
} while ($row_OrderItems = mysql_fetch_assoc($OrderItems)); ?>

  <tr>
    <td colspan="5">Total order amount (incl. shipping and handling): amp;euro; <? echo $total; ?></td>
  </tr>
  

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

1. Да, у меня есть, я использую print_r и могу правильно видеть все данные.

Ответ №3:

Просто К вашему сведению, эта часть вашего заявления:

 SELECT * FROM orderitems oi, orders o 
LEFT OUTER JOIN product p ON p.dbarcode = oi.orderitems_item
  

извлекает все из orderitems , orders и products . Добавляйте к * таблицу, из которой вы хотите получить все поля, или перепишите ее для извлечения определенных полей.

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

1. Я понимаю вашу точку зрения, но не выполняется условие «И oi.orderitems_ordercode = ‘».$_GET[‘ordercode’].»‘» выполните задание и просто извлеките определенные записи из базы данных?