php - 电子商务产品过滤器数据库设计

标签 php mysql activerecord yii e-commerce

我正在创建一个电子商务网站,我的产品按类别分组(就像在任何其他电子商务系统中一样)。

问题如下:不同的类别(和其中的产品)需要具有不同的属性(如电视的智能电视或不)。

所以有人可以帮助我了解一些产品过滤“理论”(数据库设计),可以遵循哪些好的做法?

我如何自动“构建”这些产品类别页面(自动构建过滤器,例如:在电视类别中是否有智能电视开关,在电话类别中是否有智能手机)。

感谢您的帮助!

最佳答案

大多数电子商务系统使用具有无限级别的类别树。

然后在编辑您的产品时,您会显示带有复选框的树,然后单击您要将此产品分配到的类别的复选框。

为此,您需要表:product、category 和 category_has_product。因此,当您选中复选框时,所有这些类别都应插入该产品的 category_has_product。

然后在搜索时将产品与 category_has_product 连接起来,非常简单。

否则,如果您希望用户只能从树的末尾选择一个类别,但您希望能够过滤父类别中的产品并将这些产品包含在子类别中,您可以查看像这样的东西,理解起来更复杂,但也许你会找到其他一些关于如何实现它的例子:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

嵌套类别的要点在于,您最终可能只将最终的 category_id 存储在产品表中,但即便如此,您仍可以施展魔法将该产品包含在所有父类别的搜索结果中。

所以上面将涵盖“如何对产品进行分类管理”。

至于链接:好吧,你可以在类别树中循环,并在你想要的地方和你想要的方式打印链接。

至于额外的过滤器,例如电视类型(智能或非智能),您可以将两者都包含在类别树中而忘记在产品表单中添加额外的字段,或者您可以使用类似属性的更复杂的解决方案:

您将在产品表单上拥有表属性 (id, name) 和表 attributes_value(id, attribute_id, value),而不是为“This tv is Smart”设置静态复选框,您将循环进入属性表,并且您有一个名为“Smart Tv”的属性,其值为“Yes、No、Maybe 等”,因此您可以使用它来绘制动态下拉菜单。

现在,如果您还需要属性的链接,那么您只需创建一个指向类别和具有特定值的特定属性的链接。示例/category.php?id=2&attribute=1&attribute_value=5

此外,如果您想要一些 seo 友好的 url,只需在类别表和 attribute_values 表中添加一个“slug”字段,然后重写 url。

您也可以看看 Prestashop,它使用或使用了这里讨论的一些东西,即使现在它变得非常复杂并且非常痛苦,但可能会提供一些有用的信息。

关于php - 电子商务产品过滤器数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383801/

相关文章:

php - 我应该延长这门课吗? (PHP)

php - jQuery .ajax() 方法

php - 如何在Cakephp3复合主键中插入空记录?

mysql - 将 2 个 Mysql 查询合并为一个

mysql - 在 Nodejs 中防止并发

ruby-on-rails-3 - Ruby on Rails : Select from database where column equals a value from array

ruby-on-rails - Rails has_many :through sum attribute on "child objects" --> SQL Toughy

php - 如何从pdf文件中获取文本并将其保存到数据库中

PHP:从字符串中获取 URL 的正则表达式

c# - 如何将 mysql 查询转换为可接受的 c# 字符串?