所以我创建了一个名为'cart'的数据库表,我原本打算通过'cartID'使其更容易,当用户将另一个项目添加到购物车时,其中一个字段会自动递增。但是,我意识到,随着为单个购物车添加更多项目,我必然会有这么多行记录。有没有更简单的方法来显示一个购物车的信息?
以下是我的'购物车'表的示例大纲:
cartID | memberID | itemID | shopID | cartQuant | cartDetail | added
------------------------------------------------------------------------
1 | 1 | 1 | 1 | 13 | Size: XS | 3/12/2018
2 | 1 | 2 | 1 | 2 | Size: XL | 3/12/2018
...
正如您所看到的,'cartID'包含由'memberID'为1添加到购物车的商品。但是,如果'cartID'就像我在''交易'上的'orderID'那样会更好'表,以便订单知道它正在查看哪个购物车。此外,'shopID'可以更好地定位项目(如排序),以便我首先显示所有'shopID'。我用ORDER BY shopID做到了。
任何帮助将不胜感激,我只是在寻找一种更有效的方式来显示和组织购物车项目。
答案 0 :(得分:0)
最近,我找到了在购物车上管理推车,客户和产品的最佳方法之一。
所以你需要5个表格。第一个表是您的客户表:
customerID | customerName | customerEmail | ....
-------------------------------------------------
INT (INCR) | VARCHAR(200) | VARCHAR (200) | ....
第二,你有商店的商店桌子:
shopID | shopName | etc....
----------------------------
INT (INCR)| VARCHAR | etc ....
然后您拥有包含所有可用产品的产品表:
productID | productName | ProductDescription | etc....
------------------------------------------------------
INT (INCR)| VARCHAR . | TEXT | etc...
购物车桌很短,但可以很容易地扩展,直到满足您的需求:
cartID | customerID | DatePlaced
------------------------------------------------
INT (INCR)| INT (From customerTable)| DATETIME
所以现在你并没有直接将产品添加到购物车表中,你需要一张包含购物车产品的表格。 CartDetail表:
cartDetailID | cartID | shopID | productID | Quantity | dateAdd
----------------------------------------------------------------
INT (INCREMENT)| INT | INT | INT | INT | DATETIME
此处的cartID可以重复,您的表格如下所示:
cartDetailID | cartID | shopID | productID | Quantity | dateAdd
----------------------------------------------------------------
0 | 15 | 1 | 253 | 3 | 2018-08-03 09:43:17
1 | 15 | 1 | 255 | 1 | 2018-08-03 09:43:17
然后,您需要做的就是形成一个查询,将所有这些表绑定在一起并获取所有表的正确值。使这样的数据库为您提供足够的空间来扩展它,即使对于不同的语言和不同的商店也是如此。希望这有点帮助
答案 1 :(得分:0)
更简单(但有点复杂)的方法来减少您在购物车桌上的记录,重新调整结构如下:
cartID | memberID | cartDetail
---------------------------------------------------
1 | 1 | 1-1-13-Size: XS, 1-2-2-Size: XL
现在您只有1个cartID,而商品和商品详情(shopID,itemID,cartQuant,cartDetail)都属于该memberID。您需要做的就是尝试使用php中的explode()
方法爆炸cartDetail的所有内容。
$SQL = "SELECT * FROM cart WHERE memberID = '$memberID'";
$result = mysqli_query($connect, $SQL);
$field = mysqli_fetch_assoc($result);
$cartID = $field['cartID'];
$cartDetail = $field['cartDetail'];
// check that cart and explode its contents to retrieve cart items based on ','
if($cartDetail != null || $cartDetail != "") {
// if cart contains ','
if(strpos($cartDetail, ',')) {
$cartArray = explode(',', $cartDetail);
$cartitems = sizeof($cartArray);
}
else {
$cartArray = array();
$cartArray[0] = $cartDetail;
$cartitems = 1;
}
}
else { $cartitems = 0; }
爆炸数组将打印出如下内容:
echo cartArray[0]; // 1-1-13-Size: XS
echo cartArray[1]; // 1-2-2-Size: XL
但是,您希望使用数组中每个元素的各个值。使用循环打印出较小阵列的爆炸内容。
// for loop here to go through every single element with i as counting
$currentItem = explode('-', $cartArray[$i]);
// 0 = shopID, 1 = itemID, 2 = cartQuant, 3 = cartDetail
$shopID = $currentItem[0];
$itemID = $currentItem[1];
$cartQuant = $currentItem[2];
$cartDetail = $currentItem[3];
你想立即显示它,因为它在该索引的循环中。
要显示购物车的内容,请使用explode()
功能进行打印。如果您尝试将新项目添加到购物车,您将不需要该功能,您只需要使用SQL语句和查询从MySQL检索值,获取“cartDetail”并将其保存到临时字符串比如$tempStr
。然后,您可以使用$tempStr = $tempStr."1-3-8-Size: M";
将新元素添加到其中。
此外,我删除了您的“已添加”字段,以便您可以使用array_reverse()
使用反向数组来显示附加到现有购物车的最新项目(您必须再次使用explode()
)。< / p>
答案 2 :(得分:0)
你应该使用数据库关系以使其完美
您需要为 user、products、cart、cart_items 创建一个表
每一个都与另一个有关系,意味着
所以现在您可以使用cart_items表添加任意数量的产品,并将产品添加到购物车表中,并将其引用到购物车表中的哪个购物车,而购物车是指拥有它的用户。
决赛桌是这样的,