【发布时间】:2018-09-23 01:25:38
【问题描述】:
我目前正在为我的一位客户构建一个基于商店的模块。这些项目有许多不同类型的类别,它们可以输入。我将使用的一个示例是收音机。
它可以是手持或移动类型的收音机。我们在以下路径下列出了收音机:
store -> radios -> brand -> mobile / handheld -> item page
如果所有内容的布局都相同,那么存储起来非常简单,但可惜并不是那么容易。他们可能有一个适用于所有收音机和品牌的配件,在这种情况下,它的存放方式如下:
store -> radios -> accessory -> item page
这是单选下方的完整类别,因此对于每个不太理想的项目组,编写 select 必须有所不同。这些项目也应该可以从共享的父类别中访问,就像我要访问 store -> radios 我应该看到这些子类别下的所有项目。这是我计划的当前数据库结构,我认为这是我遇到最多问题的地方(P.S:ID 类别是唯一的、主要的和自动递增的):
+===================================================+
| ID | Category Name | Path | Parent ID |
+===================================================+
| 1 | radios | radios | 0 |
| 2 | accessory | misc | 1 |
| 3 | motorola | motorola | 1 |
| 4 | handheld | handheld | 3 |
| 5 | mobile | mobile | 3 |
+===================================================+
然后我将产品上的category_id 设置为说.. 5 用于我添加到产品页面的移动收音机。如果我访问产品页面,我需要获取每个父类别的路径以显示在页面上,例如
store/radios/motorola/mobile/product-page-here.html
我必须使用路径字段从上述数据库构建该路径并加入所有父类以获得正确的路径。现在,我正在做很多 select * FROM tblname WHERE id = parent 然后在该命令的 while 循环中,以相同的方式进行另一个选择,直到我回到父表。必须有更好的方法来做到这一点,特别是因为如果我只深入 3 层,而客户添加了 4 层的子类别,它永远不会走在正确的道路上。
最后一个问题是,使用上面的示例,如果我改为转到store/radios/motorola,它将尝试获取category_id 下列出的任何项目3 而不是5,并且该项目不会显示在motorola 的常规选项卡下,因为它是mobile 表的子代,motorola 表的间接子代。通过为他们提供超过 1 个子类别选项,这使得规划整个系统变得非常痛苦。
无论如何,感谢您的阅读,请在下方留下您的 cmets 或建议。顺便说一句,这一切都存储在 MySQL 中并从 PHP 脚本中调用。
【问题讨论】: