2011-09-29 297 views
1

我正在购物车上使用一点点复杂的方式将产品存储在购物车中。如何在复杂购物车的数据库中存储值

对于用户可以在购物车增加每个产品有一个表是这样的:

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 

谢谢。

+0

您需要多久才能检索并显示详细信息?为了什么目的? –

+0

不同颜色/尺寸组合的价格是否有所不同?这可能有助于确定您的表的结构。 –

+0

DJ Quimby - 价格相同,无论颜色或尺寸。 – Psyche

回答

1

这就是我要做的:

在数据库中为每个颜色/尺寸组合添加一个新行。因此,像这样:

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

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

1

我会将这些数据标准化为数据库中的数据对。为用户,产品,颜色,大小和数量订购一个专栏。您发布的用户界面上的每个方块都是数据库中的一行。

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

+0

感谢您的输入Mike。我用我当前的表格结构编辑了我的帖子,也因为我认为这不是最好的选择。 – Psyche

+0

每种颜色请求多个尺寸将意味着表中有多行。你会有一排“红色,大小2”,另一排是“红色,大小3”。 –

+0

迈克,我同意你的看法,你可以看到我的结构非常像说的方式。但是,如果有人输入的数量超过每种颜色的一种尺寸,就会出现问题。我不知道如何获得并显示它。 – Psyche

0

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

1

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

希望你有某种'项目'表,并希望每个颜色/尺寸组合(也就是说,每个颜色/尺寸组合是一个单独的产品)每个项目的关键是不同的。

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

+0

就购物车功能而言(我没有太多经验),如何存储'临时'数据?我不认为将数据存储在数据库中是确认订单之前的最佳方式。毕竟,他们可能决定不订购,此时如果您在确认之前插入,您需要从数据库中删除“订单”。或者我在这里的完全不同的页面? –

+0

是否要在确认之前将数据存储在数据库中是否是需求决定。有些人希望跟踪放弃的订单,在这种情况下,您可以拥有一个名为'isSubmitted'的字段或默认为0的字段,并且在订单确认时设置为1。 –

+0

是的,这是有道理的。感谢您的澄清。虽然我已经在数据库设计方面处理了类似的问题,但我并没有真正使用购物车的功能。 –

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表存储每个独特项目 - 例如:大红色乔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作为变量显示在页面上的所有信息。然后,您可以使用那里的信息将每个文本框映射到数组的索引。

希望这会使您指向正确的方向。