如何在数据库中存储复杂购物车的值

时间:2011-09-29 19:18:15

标签: php database

我正在购买购物车,其中有一些复杂的方式将产品存放在购物车中。

对于用户可以在购物车中添加的每个产品,都有一个如下表格:

enter image description here

在此表中,用户输入指定大小和颜色的数量。将此值存储在数据库表中的最佳方法是什么,以便我以后可以轻松获取并显示它们?

我正在使用PHP和MySQL数据库。

现在我的表看起来像下面但是当有人要求每种颜色多个尺寸时,我无法获取值。

CREATE TABLE IF NOT EXISTS `site_platform_cart` (
  `cart_id` int(10) unsigned NOT NULL auto_increment,
  `cart_product_id` int(10) unsigned NOT NULL,
  `cart_product_name` varchar(256) collate latin1_general_ci NOT NULL,
  `cart_product_photo` varchar(256) collate latin1_general_ci NOT NULL,
  `cart_product_color_name` varchar(128) collate latin1_general_ci NOT NULL,
  `cart_product_color_image` varchar(128) collate latin1_general_ci NOT NULL,
  `cart_product_color` tinyint(4) NOT NULL,
  `cart_product_size` tinyint(2) NOT NULL,
  `cart_product_quantity` tinyint(3) unsigned NOT NULL,
  `cart_product_price` varchar(12) collate latin1_general_ci NOT NULL,
  `cart_date` date NOT NULL,
  `cart_user_id` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`cart_id`)
) ENGINE=MyISAM

谢谢。

5 个答案:

答案 0 :(得分:1)

这就是我要做的事情:

在数据库中为每个颜色/大小组合添加一个新行。所以像这样:

INSERT INTO chart (user_id,item_id,color,size,quantity,cart_date) VALUES (.....

您也可以在$_SESSION中添加图表项,这可能是一个更好的主意。这样您的数据库就不会受到污染

答案 1 :(得分:1)

我会将数据库中的这些数据标准化为对。为用户,产品,颜色,尺寸和订购数量添加一列。您发布的UI上的每个方块都是数据库中的一行。

这很灵活,因为您可以轻松添加更多产品,颜色,尺寸等。查询用户,产品,颜色等都非常容易。

答案 2 :(得分:1)

您的购物车只不过是销售订单的代表,您应该记住这一点。您需要两个表(至少)来表示销售订单:一个包含整体订单的信息,另一个包含订单所有行的信息。

希望你有一些'Items'表,希望每个颜色/尺寸组合的每个项目键都不同(换句话说,每个颜色/尺寸组合是一个单独的产品)。

如果是,只需将商品编号和数量存储在订单的行表中,就像在任何其他商店中一样。

答案 3 :(得分:0)

没有最好的办法。我会使用一个存储所有可能颜色的表。第二个表存储所有可能的大小。第三个订单表将包含数量和对大小和颜色表的引用。

答案 4 :(得分:0)

好的,在仔细考虑了你想要在这里实现的目标后,我将投入两美分。

我认为,最紧迫的问题是您设计数据库的方式。我之前不得不处理类似的问题,最终用作解决方案的是这样的:

table: Colours
    ColourID* | ColourDescription

table: Sizes
    SizeID* | SizeDescription

table: GenericItem
    GenericID* | Item Description | Price | Etc

table: Item
    ItemID* | ParentItem | SizeID | ColourID | AvailableStock | Etc

ColoursSizes表存储您的产品范围内可用的每种尺寸和颜色。 GenericItem表存储您存储的每个产品。例如,Joe Bloggs V领T恤。最后,Item表存储每个唯一项目 - 例如:Large Red Joe Bloggs V领T恤。您可以为其提供唯一的项ID,并可以轻松地从GenericItem表中引用其他信息。

现在,就购物车而言,您可以拥有如下表格:

table: Cart
    CartID* | CartUserID | CartDate | Etc

此表格包含每个特定购物车的信息。现在,扩展Topener的答案,您将分别保存每个购物车行的信息:

table: CartLine
    CartLineID* | CartID | ItemID | Quantity | Etc

通过这种方式,您可以使数据更加规范化并易于访问,并允许您将每个购物车存储在数据库中。

要检索此数据,您需要做的就是将CartID存储在$_session中,并让您的所有查询都来自此。例如,要重新显示订单行:SELECT * FROM CartLine WHERE CartID = $_SESSION['CartID']

要立即显示网格,您需要做的就是创建一个基于SELECT * FROM Item WHERE ParentItem = 'GenericID'之类的数组。在这个例子中,我假设您已经将通用项目的ID作为变量在某处显示在页面上的所有相关信息。然后,您可以使用那里的信息将每个文本框映射到数组的索引。

希望这会指出你正确的方向。