[英]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.