0

我有一个使用邻接列表模型进行层次结构存储的表。因此,此表中我最相关的列是:

ItemId // is auto_increment
ParentId
Level
ParentTrail // in the form of "parentId/../parentId/itemId"

然后我创建了一个插入前跳跳器,用于填充列LevelParentTrail. 由于最后一列还包括当前项目的 ID,我不得不在我的触发器中使用一个技巧,因为auto_increment在插入前触发器中列不可用。所以我从information_schema.tables表中得到了这个值。

ParentId一切正常,直到我尝试编写一个更新触发器,当项目更改其父项(已更改)时,它将更新我的项目及其后代。但我无法在更新触发器内对我的表进行更新。我所能做的就是改变当前记录的值,而不是其他的。

我可以为层次结构数据使用单独的表,但这意味着我还必须创建一个视图来组合这两个表(1:1 关系),我想完全避免这种情况。

有没有办法将所有这些都放在同一个表中,以便这些字段(LevelParetTrail)使用触发器自动设置/更新自己?

4

1 回答 1

2

这听起来可能是可能的,但它会涉及一些繁重的字符串匹配等。不想深入研究它。

如果您愿意稍微更改您的数据库模型并实现嵌套集(在页面上向下滚动),则可以通过让触发器更新左右值来轻松完成。

于 2009-12-15T16:00:27.483 回答