我有两个实体post
和category
,这是1:n
关系。
我有一个包含两列{,1}},post_id
category_id
表格有categories
列,id
列和status
列
如果某个类别是另一个类别(n深度)的子类,那么它的parent_id
不为空。
如果某个类别在线,则状态为1,否则为0。
我需要做的是找出帖子是否可见。
这需要:
加入帖子的Foreach类跟踪它的树到根节点(直到某个类别有parent_id
== parent_id
),如果这些类别中的任何一个有null
0那么路径被视为离线。
如果任何路径在线,则该帖子被视为可见,否则会被隐藏。
我能想到的唯一方法(作为半伪代码)是:
status
但是这可能最终导致很多sql查询,还有更好的方法吗?
答案 0 :(得分:0)
经典数据库与内存权衡。你正在做的是建造一个有树叶的树。要构建树,您需要递归循环叶子。来自数据库的有两种情况:
什么是更好的取决于很多事情:你的硬件(磁盘访问与内存),树的大小,以命名两个。
答案 1 :(得分:0)
如果嵌套集不是一个选项,我知道以下内容:
这也适用于排序的嵌套集,this answer中已经概述了原则,但是关于获取深度的算法不起作用,我建议可以删除recursive iterator隐藏物品。
此外,如果数据未排序,您可以从the answer to Nested array. Third level is disappearing中列出的所有行的(未排序)查询创建树结构。不需要递归,你得到一个你可以轻松输出的结构,我应该在另一个答案中涵盖<ul>/<li>
html样式输出。