#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’].»‘» выполните задание и просто извлеките определенные записи из базы данных?