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

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


然后创建了一个插入前tigger,用于填充LevelParentTrail列。由于最后一列还包含当前项目的ID,因此我必须在触发器中使用一个技巧,因为auto_increment列在插入前触发器中不可用。因此,我从information_schema.tables表中获得了该值。

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

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

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

最佳答案

这听起来可能是可行的,但是会涉及到一些繁重的字符串匹配等操作。不想让自己陷入困境。

如果您愿意稍微更改数据库模型并实现Nested Set(向下滚动页面),则可以通过使触发器更新左右值来轻松实现。

关于mysql - MySql数据库表中的树数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1880156/

10-11 03:19
查看更多