[英]php mysql display/get all the products ordered by the customer grouped by ORDER_DATE from 2 tables using join
我有这两个表CART
和ORDERS
。 我想显示/获取按ORDER_DATE
分组的客户订购的所有产品,如何通过合并这两个表来做到这一点? 或正确的代码,脚本或语法是什么。.这是1:n关系,我也想显示客户订购的商品ORDERED BY order_date。
CART
表:
ORDER
表:
如果您要列出按订购日期排序的所有商品(未分组),则可能是这样的:
SELECT *
FROM `order`
LEFT JOIN cart ON cart.cart_id=`order`.cart_id
ORDER BY order_date ASC
要么 :
SELECT *
FROM cart
LEFT JOIN `order` ON `order`.cart_id=cart.cart_id
ORDER BY order_date ASC
从结构上看,购物车似乎可以包含多个订单(而订单不能包含更多的购物车)-您必须在这里告诉我们这两个表中是1:n关系还是1:1(在在这种情况下,您不需要cart_id,而可以使用order_id作为两个表中的链接元素)
万一您想对其进行“分组”,那么您将不得不牺牲细节(将其分组在一起),如果您想查看所有订单的总价值,分组是有用的-但是这样做,您将仅查看总计值,但不查看每个订单中的项目(不在逐行视图中)
编辑:
在那种情况下,假设主表是“ order”,则结构看起来并不健全,那么具有详细信息的表应包含对主表的引用:
购物车表:
订单表:
同样,您的问题不是很清楚。 您是否要查看用户购买的商品,并按商品分组(即,如果他们今天买了一支铅笔,明天又买了另一支铅笔,则您将看到两行类似的结果:
item | qty
-------+----
pencil | 2
rubber | 1
然后使用:
SELECT `order`.*, product_id, product_name, SUM(quantity) AS qty
FROM `order`
LEFT JOIN cart ON cart.order_id=`order`.order_id
GROUP BY product_id
ORDER BY product_name
Juan,这我要花很长时间了,我不确定Stack Overflow网站是否适合这种对话框,但是我将尝试再次解释。 我将简化您的表,以便在此处发布的代码很简单。
CREATE TABLE orders (
orderID int unsigned not null auto_increment,
user int unsigned not null,
PRIMARY KEY (orderID)
);
CREATE TABLE orderitems (
oiID int unsigned not null auto_increment,
order int unsigned not null,
item int unsigned not null,
PRIMARY KEY (oiID)
);
上面假设有一个用户表(用户名和电子邮件地址在哪里)和项目表(项目名称和价格在哪里)。
我还假设(错误地,但是为了简单起见),在我的情况下,没有人会愿意购买超过1件我要出售的商品,也没有人愿意购买超过3件商品与此同时。
然后我的HTML输入表单就足够简单了,因为用户必须在订购时登录(因此我已经知道了他们的userID-并且它保存在我的php $ _SESSION ['userID']全局变量中),所以订单始终是动态的在用户单击CHECKOUT按钮时(提交表单)分配的,因此我们唯一需要用户输入的是项目ID(例如,而是从下拉列表中选择)。
所以这是非常简单的输入表格:
<form action='orderit.php' method='post'>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/>
<select name='item[]'>
<option value='' selected='selected'>Pick an item from the list!</option>
<option value='1'>Knife</option>
<option value='2'>Spoon</option>
<option value='3'>Lava lamp</option>
<option value='4'>HB pencil</option>
</select><br/><br/>
<input type='submit' value=' Checkout ' name='do'/>
</form>
从上面的你比时,当用户点击结帐的所有数据(即由客户发送到的选择看action
被设置为orderit.php
。请注意,我不打扰关于确保用户submiting有效信息而且我没有使用最新的技术(即msqli),而是使用了已弃用的mysql例程。
因此,它如下所示:
<?php
//here you will have your database opened, session initiated and so on
// $db contains the database connection handler
// $_POST['userID'] contains valid user's id
if (isset($_POST['item']) && count($_POST['item'])>0) {
//they ordered something we can create the order
$q=mysql_query("INSERT INTO orders SET user='".mysql_real_escape_string($_SESSION['userID'])."'",$db);
if (!$q)
die("An error while creating new order");
$orderID=mysql_insert_id($db); //fetch the just-now created order's ID
foreach($_POST['item'] as $item) { //go through all the ordered items
$q=mysql_query("INSERT INTO orderitems SET order='$orderID', item='".abs((int) $item)."'");
if (!$q)
die("Couldn't save item $item of order #$orderID");
}
print "Your order was saved successfuly!";
} else
die("This is an empty order");
?>
就这样。
请注意,我现在是从头开始编写此代码,因此可能存在输入错误或其他类型的错误。 将其更多地作为一个大概的指南,而不是作为一个有效的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.