我目前正在创建一个自定义电子商务网站(在php中,但这与此问题并不相关)。
我刚刚创建购物篮,无法决定以下两个选项:
选项1:
篮子桌:
在此选项中,每个用户只有一行,所有项目和数量都存储在项目字段中。
此格式已在非登录用户的基于cookie的篮子中使用,因此解析items字段没有问题。
选项2:
Basket_items表:
在这个选项中,我会在每个项目中有一行。
选项3:
提出一个更好的主意。
结论
这两个选项对我来说同样容易实现,因此提出更新篮子更有效/便利的问题。
感谢您的回答,Nico
答案 0 :(得分:3)
选项2是要走的路。在项目字段(选项1)中存储所有项目和数量意味着您违背了MySQL的关系性质。您必须定义一个格式并使用选项1解析它,您没有使用选项2编写的其他代码。此外,使用选项2,您将能够更轻松地执行其他操作,例如计算总计,运费金额等,以及销售商品数量的报告(只是一个简单的查询)。
当然,如果我写这篇文章,我也会问自己是否有可用的库 - 为什么要重新发明像购物车这样的常用功能。我不是来自PHP世界,所以我不知道选项是什么,但我确信必须有一些你可以重用的东西。所以最终,我鼓励你选择选项3 - 如果你避免它,不要自己实施: - )
答案 1 :(得分:2)
使用选项2 - 您无法真实地支持使用选项1对购物车进行更改或从中进行报告。
答案 2 :(得分:2)
您将需要至少,一个购物篮桌和一个basket_items表。购物车本来就变得臃肿,你很快就会意识到你需要的关系表比预期的多。以这种方式打破表格为每个用户的篮子提供了与他们的项目的1对多关系。
这将允许您将来做一些事情,例如将促销代码应用于每个用户的购物篮。
<强>篮强>
<强> basket_items 强>
答案 3 :(得分:1)
选项1要求您序列化items列中的数据,由于复杂性和性能原因,这通常是不受欢迎的。
您正在使用数据库来获取其链接功能,因此我们可以使用它们。你的cart_items表应该非常好用。这样,每个购物车都可以指向用户,购物车中的所有商品都可以指向购物车。
答案 4 :(得分:0)
选项2.这是最佳选择,可提供良好的数据规范化。它将让位于未来可能的高级选择和过滤用户篮子。
答案 5 :(得分:0)
选项2是首选选项。
“item_id”可以是存储所有项目的表的ID(存储表)以及此项目的完整描述和其他信息。但是我会为每个项目添加一个价格标签,并且通常有意义,还要将用户会话ID / md5哈希添加到此购物篮中。因此PHP创建此类表的SQL查询字符串可能类似于:
$sql="CREATE TABLE ".$table_prefix."Basket (
id int(11) NOT NULL auto_increment,
sid varchar(50) default NULL,
item_id int(10) default NULL,
quantity int(10) default 1,
price varchar(10) default NULL,
PRIMARY KEY(id)
) $collate_charset;";
$ collate_charset:类似于$collate_charset="DEFAULT CHARACTER SET utf8";
$ table_prefix:对于像$table_prefix="myshop_";
使用此类表,您可以从“Sum”之类的SQL函数中受益,以获得用户的快速小计或没有太多代码的所有用户(“选择总和(价格*数量)WHERE sid
='1234'” )。
如果此购物篮也适用于“来宾”,则需要另一个存储会话ID和创建日期的表格,以便您可以定期从未使用的条目中清理购物篮。