我正在创建一个电子商务网站,我的产品按类别分组(如任何其他电子商务系统)。
问题如下:不同类别(及其中的产品)需要具有不同的属性(如电视的智能电视与否)。
所以有人可以帮我一些产品过滤“理论”(数据库设计)有哪些好的做法可以遵循?
我如何自动“构建”这些产品类别页面(自动构建过滤器,例如:在电视类别中是否为智能电视或智能电视开关,以及电话类别智能手机中是否存在)。
感谢您的帮助!
答案 0 :(得分:5)
大多数电子商务系统都使用无限级别的类别树。
然后,在编辑产品时,您会显示带有复选框的树,然后单击要将此产品分配到的类别的复选框。
为此,您需要表格: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”的静态复选框,您将循环到属性表中,并且你有一个名为“智能电视”的属性,值为“是,否,可能等”,所以你用它来绘制动态下拉列表。
现在,如果您还需要属性的链接,那么您只需创建一个指向类别和具有特定值的特定属性的链接。示例/category.php?id=2&attribute=1&attribute_value=5
此外,如果你想要一些seo友好的网址,只需在类别表和attribute_values表中添加一个“slug”字段,然后重写网址。
你也可以看看Prestashop,它使用或使用了这里讨论的一些东西,即使现在它变得非常复杂并且非常痛苦,但可能会提供一些有用的信息。