首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修复损坏的嵌套集合

修复损坏的嵌套集合
EN

Stack Overflow用户
提问于 2009-10-05 18:06:26
回答 3查看 1.6K关注 0票数 0

我必须通过脚本或sql修复损坏的嵌套集链。该表包含一个左侧值列和一个右侧值列,但没有父id列。我能够计算嵌套集合中每个节点的级别。左值和右值之间存在差距。计算级别的结构有效。有没有人知道通过SQL缩小差距的解决方案?(MySQL)

这些建议都不适合我的问题,但谢谢你的参与。

我为自己设计了一个解决方案: 1.第一步计算父I并转换为邻接表2.使用Joe Celko的方法将邻接表转换为嵌套集3.更新旧的左侧和右侧值

EN

回答 3

Stack Overflow用户

发布于 2009-10-05 18:20:06

我只需要从您拥有的left和right值生成一个parent_id列,然后重新生成left和right值。

如果您不想修改当前表,您甚至可以在临时表中进行修改。

票数 1
EN

Stack Overflow用户

发布于 2009-10-06 03:11:22

节点(c)的每个祖先具有较小的left和较大的right值。并且直接父代(p)是该(祖先)集中具有最大left值的父代。

例如。

代码语言:javascript
复制
CREATE TABLE nested (
  id int AUTO_INCREMENT,
  name varchar(16),
  parentid int DEFAULT 0,
  lft int(11),
  rgt int(11),
  PRIMARY KEY (id)
)

INSERT INTO
    nested (name, parentid, lft, rgt)
VALUES
    ('1'      ,0,1,20),
    ('1.1'    ,0,2,9),
    ('1.1.1'  ,0,3,4),
    ('1.1.2'  ,0,5,6),
    ('1.1.3'  ,0,7,8),
    ('1.2'    ,0,10,19),
    ('1.2.1'  ,0,11,14),
    ('1.2.1.1',0,12,13),
    ('1.2.2'  ,0,15,16),
    ('1.2.3'  ,0,17,18)

SELECT
  p.id as pid, p.name as pname,
  c.id as cid, c.name as cname  
FROM
  nested as c
LEFT JOIN
  nested as p
ON
  p.lft=(
    SELECT
      MAX(lft)
    FROM
      nested AS l
    WHERE
      c.lft > l.lft
      AND c.lft < l.rgt
  )

返回

代码语言:javascript
复制
pid    pname    cid    cname
NULL   NULL     1      1
1      1        2      1.1
2      1.1      3      1.1.1
2      1.1      4      1.1.2
2      1.1      5      1.1.3
1      1        6      1.2
6      1.2      7      1.2.1
7      1.2.1    8      1.2.1.1
6      1.2      9      1.2.2
6      1.2      10     1.2.3
票数 1
EN

Stack Overflow用户

发布于 2013-07-12 01:01:05

在嵌套集合中有4到5种不同的损坏情况是完全可以修复的(如果按正确的顺序完成)。Snaggle很容易防止与一个简单的触发检查,看看如果不是>=的权利。我已经按照这个顺序修复了一个嵌套的集合,得到了最好的结果。一旦问题被分解如下,SQL本身并不困难。

交叉(1:4 3:6)或(1:2 2:3)

  • Under/Over (1:4 1:3) OR (1:4 2:4)

  • (2:3 5:6 1:7) or (2:4 5:6 1:7)

  • Snaggle (2:1 4:2) or (1:1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1521532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档