我设计了一个SQL结构来表示类别及其子类别。子类别层次
我有3个表:
文章表:
id,title,content
分类表:
id, title, parent_id
articles_categories:
id,article_id,category_id
SQL没有问题,但现在 - 可以说我在文章ID 5 文章ID 5有 - 3类别,其中2人有父母,主要有'0'作为父母。
如何有效地获取它们? (可以说 - 面包屑)。
谢谢!
我设计了一个SQL结构来表示类别及其子类别。子类别层次
我有3个表:
文章表:
id,title,content
分类表:
id, title, parent_id
articles_categories:
id,article_id,category_id
SQL没有问题,但现在 - 可以说我在文章ID 5 文章ID 5有 - 3类别,其中2人有父母,主要有'0'作为父母。
如何有效地获取它们? (可以说 - 面包屑)。
谢谢!
这应该做的工作:
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” 列。
除非类别层次结构的深度是固定的,否则不能在您的当前模型(邻接表)中使用MySQL。您必须在循环中使用几个SQL语句来遍历层次结构。
如果类别层次结构是相当静态的,你可以“预先计算”树使用:
以上所有的,交易为读取业绩写绩效。 谷歌或搜索以上任何一个,你会发现如何实现它的例子。
很多时候,我发现将数据存储在邻接列表中(因为最匹配数据模型)并在应用程序中缓存树的副本足够好,但这取决于您的要求当然:)
*够好*会在紧急情况下做到! :)谢谢,我使用已经处理缓存的CI,所以我只需坚持邻接列表 - 我已经阅读了“预定义树遍历”方法,但现在根本没有时间将其转换为代码... – 2011-10-15 02:41:52
是'文章''分类'多对多关系。如果是的话,我会去罗尼斯回答 – 2011-02-27 09:59:37