繁体   English   中英

子类别层次结构

[英]Sub categories Hierarchy

我设计了一个SQL结构来表示类别及其子类别。

我有3张桌子:

articles
articles_categories
categories

文章表:

id,title,content

分类表:

id, title, parent_id

articles_categories:

id,article_id,category_id

SQL没问题,但是现在-假设我在文章ID 5上,文章ID 5具有-3个类别,其中2个具有父级,而主类的父级为'0'。

如何有效地获取它们? (让我们说-面包屑)。

谢谢!

除非类别层次结构的深度是固定的,否则您无法在MySQL中使用当前模型(邻接表)执行此操作。 您必须在循环中使用多个SQL语句遍历层次结构。

如果类别层次结构相当静态,则可以使用以下方法“预计算”树:

  • 路径枚举
  • 套套
  • 封闭表

以上所有内容都将写入性能与读取性能进行了权衡。 Google或在SO中搜索以上任何内容,您将找到有关实现方法的示例。

我经常发现,将数据存储在邻接列表中(因为与数据模型最匹配),并在应用程序中缓存树的副本就足够了,但这当然取决于您的要求:)

这应该做的工作:

select * from articles_categories 
left join categories on categories.id = articles_categories.category_id 
where article_id=1;

+------+------------+-------------+------+--------+-----------+
| id   | article_id | category_id | id   | title  | parent_id |
+------+------------+-------------+------+--------+-----------+
| NULL |          1 |           1 |    1 | first  |         0 |
| NULL |          1 |           2 |    2 | second |         1 |
| NULL |          1 |           3 |    3 | third  |         2 |
+------+------------+-------------+------+--------+-----------+

另外,我将从关联表articles_categories删除“ id”列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM