Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用MySQL制作购物车表的更好方法?_Php_Mysql - Fatal编程技术网

Php 使用MySQL制作购物车表的更好方法?

Php 使用MySQL制作购物车表的更好方法?,php,mysql,Php,Mysql,因此,我创建了一个名为“cart”的数据库表,我最初打算通过使用“cartID”使其更简单,这是用户向购物车添加另一项时自动递增的字段之一。然而,我意识到,随着更多的项目将被添加到一个单一的购物车,我肯定会有这么多的记录行。有没有更简单的方法来显示来自一个购物车的信息 以下是我的“购物车”表的示例大纲: cartID | memberID | itemID | shopID | cartQuant | cartDetail | added ------------------------

因此,我创建了一个名为“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”与我在“transactions”表上的“orderID”类似,以便订单知道它正在查看哪个购物车,则会更好。此外,“shopID”用于更好地定位项目,如排序,以便我首先显示所有“shopID”。我是按shopID订购的


如果您能提供任何帮助,我将不胜感激。我正在寻找一种更有效的方式来显示和组织购物车项目。

最近,我找到了管理购物车、客户和购物车上产品的最佳方式之一

所以你需要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...
cart表非常短,但可以非常轻松地展开,直到满足您的需要:

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

然后,您需要做的就是形成一个查询,将所有这些表绑定在一起,并获得所有表的正确值。这样创建数据库可以为您提供足够的空间来扩展它,即使对于不同的语言和不同的商店也是如此。希望这能有所帮助最近我想出了一个最好的方法来管理购物车、客户和购物车上的产品

所以你需要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...
cart表非常短,但可以非常轻松地展开,直到满足您的需要:

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

然后,您需要做的就是形成一个查询,将所有这些表绑定在一起,并获得所有表的正确值。这样创建数据库可以为您提供足够的空间来扩展它,即使对于不同的语言和不同的商店也是如此。希望这有点帮助

为了减少购物车表上的记录,一种简单但复杂的方法是将结构重新调整到以下位置:

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;将新元素添加到其中


此外,我还删除了您添加的字段,以便您可以使用“反向数组”(reverse array)使用“反向数组”(array_reverse)来显示附加到现有购物车上的最新项目。您必须再次使用“爆炸”(explode)。

为了减少购物车表上的记录,一种更简单但更复杂的方法是将结构重新调整到以下位置:

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\u reverse使用reverse数组来显示附加到现有购物车的最新项目。您必须再次使用explode。您应该使用数据库关系,以使其完美

您需要为用户、产品、购物车、购物车项目创建一个表

每一个都与另一个有关系,这意味着

购物车表与用户表具有用户id关系 购物车项目与购物车表具有购物车id关系 购物车项目与产品表具有产品id关系 因此,现在您可以使用cart_items表添加任意数量的购物车,并将产品添加到购物车中,并将其引用到购物车表中的哪个购物车,购物车引用拥有它的用户

最终的表格是这样的


您应该使用数据库关系,以使其更加完美

您需要为用户、产品、购物车、购物车项目创建一个表

每一个都与另一个有关系,这意味着

购物车表与用户表具有用户id关系 购物车项目与购物车表具有购物车id关系 购物车项目与产品表具有产品id关系 因此,现在您可以使用cart_items表添加任意数量的购物车,并将产品添加到购物车中,并将其引用到购物车表中的哪个购物车,购物车引用拥有它的用户

最终的表格是这样的


购物车可以包含来自多家商店的商品?在数据库中存储购物车是有意的选择吗?你考虑过其他选择吗?或者您的“购物车”实际上是一个“已完成订单”,只是名称错误?请分享更多详细信息。你如何分类更好的方法?你是怎么做到的?这个问题与PHP有什么关系?购物车可以包含来自多家商店的商品?在数据库中存储购物车是有意的选择吗?你考虑过其他选择吗?或者您的“购物车”实际上是一个“已完成订单”,只是名称错误?请分享更多详细信息。你如何分类更好的方法?你是怎么做到的?这个问题与PHP有什么关系?这一点帮助不大,帮助很大。感谢您提供的解决方案。如果您收到数千份订单,您的购物车表会快速增长,如果无法清理此表,您必须对其进行索引以加快搜索速度,因为用户可能会将项目添加到购物车中,但不会签出。这一点都没有帮助,但帮助很大。感谢您提供的解决方案。如果您收到数千份订单,您的购物车表会快速增长,如果无法清理此表,您必须对其编制索引以加快搜索速度,因为用户可能会将项目添加到购物车中,但不会签出。