Mysql如何选择所有订单和订单中的项目
好吧我有3个表格,其中包含产品,其中一个带有订单,并与订单ID和产品ID联接表以将产品与订单相关联。Mysql如何选择所有订单和订单中的项目
但是,如何设置一个查询来选择并返回所有订单以及每个订单中的项目。所以我最后在每一行都有一个列order_items。
到目前为止,我有:
SELECT
intOrderID AS Order_ID,
strPaymentMethod AS Payment_Method,
strPaymentRef, AS Payment_Ref,
strPaymentStatus AS Payment_Status,
dtmDate AS Date,
curPaymentAmount AS Net_Price,
curShippingFee AS Shipping_Fee
FROM tbl_mod_ShopOrders
其他表是tbl_mod_ShopOrderItems
,我需要选择
intProductID
strProductTitle
curPrice
intQty
为订单中的每个项目。
我知道我需要做某种子查询,但请注意如何构造它。
假设你的表是PRODUCT
,ORDER
和连接表PRODUCTORDER
具有键product_id
和order_id
,您可以:
SELECT o.id, GROUP_CONCAT(po.product_id) AS products_list
FROM PRODUCT p, PRODUCTORDER po
WHERE o.id = po.order_id
GROUP BY o.id
ORDER BY o.id
作为聚合函数使用GROUP_CONCAT。以上结果,例如:
id | products_list
---|--------------
01 | 1,4,9
02 | 2,4,6
03 | 5
04 | 3,5
其中id
是ORDER ID。
每个订单都有几个项目。这意味着当您选择订单时,每行可以有一个或多个项目。
如果您需要简单地显示每个订单中的项目数量等简单内容,则可以使用一个查询轻松检索所有信息。但是,如果您需要显示每个订单中商品的详细信息(例如商品,数量,价格),那么执行第二个查询,检索商品信息会更容易。 第二个查询可以针对每个订单执行,或者对于所有显示的订单仅执行一次(使用IN
子句创建一个包含显示的订单id并且选择属于这些id的所有项目的数组)。
举例详细情况:
//$orders = array of orders retrieved by your query
// loop through the orders to collect all ids
$order_ids = array();
foreach($orders as $order) {
$order_ids[] = $order->Order_ID;
}
// build the select to retrieve all items
$items = array();
// make the select only if there are orders available
if(count($order_ids) > 0) {
$q = "SELECT * from tbl_mod_ShopOrderItems WHERE order_id IN (" . implode(',', $order_ids) . ") ";
// ...
// assign result to $items
}
后来,显示订单,您可以依次通过$items
并检查order_id
符合当前order
foreach($orders as $order) {
// ...
// display order info
// display order items
foreach($items as $item) {
// if the item belongs to the current order
if($item->order_id == $order->order_id) {
// ...
// display the current item
}
}
}
有一个例子吗? – user794846 2012-04-20 09:43:35
上述哪种情况适合您的问题?我不知道你是否需要这个例子。 – 2012-04-20 09:45:31
关于每个订单案例中的项目的详细信息 – user794846 2012-04-20 09:52:46
我实际上并不需要的时候从产品表中选择任何东西,因为连接表具有产品标题和产品ID。但看起来沿着正确的路线 – user794846 2012-04-20 09:33:10