我设计了一个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'作为父母。
如何有效地获取它们? (比方说 - 面包屑)。
谢谢!
答案 0 :(得分:3)
除非修复了类别层次结构的深度,否则不能使用当前模型(邻接列表)在MySQL中执行此操作。您必须在循环中使用多个SQL语句遍历层次结构。
如果类别层次结构是相当静态的,您可以使用以下命令“预先计算”树
以上所有,交易为读取性能写入性能。 谷歌或搜索上述任何一个的SO,你会发现如何实现它的例子。
通常,我发现将数据存储在邻接列表中(因为最匹配数据模型)并在应用程序中缓存树的副本已经足够了,但这取决于您的要求当然:)< / p>
答案 1 :(得分:2)
这应该做的工作:
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”列。