php - 类别和子类别表结构 - mysql

标签 php mysql

管理员可以创建多个类别和子类别。

例如管理员可以做什么:

cat1                            cat2
   ->sub1                         ->sub1
   ->sub2                            ->sub1_1
   ->sub3
      ->sub3_1
      ->sub3_2
         ->sub3_2_1
         ->sub3_2_2
   ->sub4
      sub4_1
   -sub5

我不知道什么是最好的选择?我应该一张 table 还是两张 table ?

这是我所知道的:

id    title   parent_cat_id

1      cat1        0
2      sub1        1
3      sub2        1
3      sub3        1
4      sub3_1      3
5      sub3_2      3
6      sub3_2_1 5
7      sub3_2_2 5
...  

最佳答案

类别和子类别都只是逻辑“类别”,因此除非您的设计有特定要求,否则无需实现多个物理表(尽管我现在想不出一个... )。

此外,不需要为层次结构中的每个级别专门设置一个结构;您只需要一个在每个“类别”(或“子类别”)级别具有自引用连接到父级的单个表。

我假设在此示例中您的类别(或子类别)可能包含以下元素:

// categories table 
category_id
category_name
element 
parent_category_id

这个解决方案很优雅,可以在不更改表格的情况下扩展您的层次结构。

顶级类别的 DML 使用谓词“parent_category_id IS NULL”。

较低级别类别(或子类别)的 DML 使用谓词“parent_category_id = 'whatever the parent category ID is'”。

干杯 斯科特

附:我没有足够的代表来响应 Sherif 的答案,而且我可能(读起来可能是)遗漏了一些东西,但是修改后的预序横向(或嵌套集)也可以用一个表来实现; this document 中很好地描述了方法和与 Adjancey 列表的比较。

我同意 Sherif 所描述的每种方法的优缺点。

关于php - 类别和子类别表结构 - mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313337/

相关文章:

php - 我应该将应用程序设置存储在一列数组中吗?或者创建一个多列表?

javascript - 上传youtube嵌入代码时在php中获取html标签

php - MySQL 查询只返回 3 个匹配行

php - Mysql 使用 Like 运算符在 json 数组中搜索

php - 获取错误解析错误 : syntax error, 意外 '$_GET' (T_VARIABLE)

mysql - 使用 LIKE 运算符时如何防止 SQL 注入(inject)?

javascript - 使用 codeigniter 3 进行 JQuery 静默刷新

mysql - 我的游标程序不起作用

mysql - 返回查询中每个 ID 的第一个

mysql - 在 MySQL 中按日期获取用户的最新记录