【问题标题】:Select the Items in Nested set选择嵌套集中的项目
【发布时间】:2013-01-12 07:56:44
【问题描述】:

我有以下嵌套集。

cat.table:

cat.ID Name Lft Rgt
  1     A    1   8
  2     B    2   5
  3     C    3   4
  4     D    6   7
  5     E    9   14
  6     F   10   11
  7     G   12   13

输出:括号中的项目数。 (在 'A' 中也会计算其节点中的项目 - B、C 和 D)

 A (7)
 -B (3)
 --C (2)
 -D (1)
 E (3)
 -F (1)
 -G (2)

项目表:

ID Cat.ID  Name
1    1     item1
2    2     item2
3    2     item3
4    2     item4
5    3     item5
6    3     item6
7    4     item7
8    6     item8
9    7     item9
10   7     item10

如果我选择猫 A,我也想选择 B、C 和 D 中的项目。如果我选择 B,则显示 B 和 C 中的项目。如果我选​​择 F,则仅显示 F... 在 Items 表中,我没有只有 Cat.ID 的左右值。

我怎么知道如果我选择“A”类别,哪些项目也在“B”、“C”和“D”中?

编辑: 例如: 如果我选择 B 而不是显示 B 和 C 中的项目(B 是 C 的父级,C 是 B 的节点) - 输出:

item2
item3
item4
item5
item6

【问题讨论】:

  • 数值是如何计算出来的?
  • 教程:mikehillyer.com/articles/managing-hierarchical-data-in-mysql 标题后面的计算:“嵌套集中的聚合函数”
  • @Gery 根据这些样本数据,您的预期输出是什么?
  • 我在末尾添加了一个示例输出
  • 我无法理解你的问题。阅读链接文章后结构清晰,但问题是什么?

标签: mysql sql nested-sets


【解决方案1】:

答案在链接文章的检索完整树段落中。

SELECT Id,Name FROM Items WHERE cat_id IN (
SELECT cat_id
FROM category AS node,
    category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
    AND parent.name = 'A')

【讨论】:

    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2020-09-06
    • 2018-06-23
    相关资源
    最近更新 更多