【发布时间】:2012-10-23 11:09:33
【问题描述】:
在我的系统中,每个项目都有一些标签。现在我想向用户展示带有标签的树。
树应该有第一层的所有标签。
在每个一级标签内,应该再次出现在同样属于一级标签的项目中找到的所有标签。
在第三层,应该出现属于第一层和第二层的标签,以此类推。
这个想法是,用户可以根据他的标签过滤项目,并且可以改进在树中输入的过滤,而无需键入标签。
项目最初是作为字符串字段存储在项目表中的,但为了简化此解决方案,我已将它们移动到子表中。
使用这些项目作为输入:
|Item |Tags |
|-----------|--------|
|Computer |a,b,c |
|Mouse |a,c |
|Keyboard |c,d |
|Monitor |a,b |
应该输出这棵树:
Tree Items that are show when selected
root Computer,Mouse,Keyboard,Monitor
+--a Computer,Mouse,Monitor
| +--b Computer,Monitor
| | +--c Computer
| +--c Computer,Mouse
| +--b Computer
+--b Computer,Monitor
| +--a Computer,Monitor
| | +--c Computer
| +--c Computer
| +--a Computer
+--c Computer,Mouse,Keyboard
| +--a Computer,Mouse
| | +--b Computer
| +--b Computer
| | +--a Computer
| +--d Keyboard
+--d Keyboard
+--c Keyboard
此 SQL 应仅在 Oracle 数据库中运行,因此使用 connect by 运算符是可以接受的。
我从 Delicious 的 Firefox 扩展中选择了这种行为,它以树的形式显示标签,但限制它只有两个级别,我需要它显示尽可能多的级别。
你有什么想法吗?
提前致谢。
【问题讨论】:
-
顺便说一句:在 4 个实体上使用 4 个标签,您的树视图中有 19 行。使用大量标签和/或实体,这将爆炸成无法管理的数字。
-
对。但是我不会有大量的标签,最多50个,只有当标签被选中时我才会加载它们,所以我认为这不是问题。但感谢评论。
标签: sql oracle tree tags hierarchy