我正在购买购物车,其中有一些复杂的方式将产品存放在购物车中。
对于用户可以在购物车中添加的每个产品,都有一个如下表格:
在此表中,用户输入指定大小和颜色的数量。将此值存储在数据库表中的最佳方法是什么,以便我以后可以轻松获取并显示它们?
我正在使用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
谢谢。
答案 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
Colours
和Sizes
表存储您的产品范围内可用的每种尺寸和颜色。 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作为变量在某处显示在页面上的所有相关信息。然后,您可以使用那里的信息将每个文本框映射到数组的索引。
希望这会指出你正确的方向。