注意:这实际上是一个论坛的数据库。
我陷入了一个有趣的问题。我创建了一个包含以下字段的数据库
ID (primary),
Data,
ParentID
ParentID 是同一表中其他行的ID。然而,这种亲子关系可以扩展到几个层次。最上面的元素将 0 作为 parentID。
数据库相当大(500 MB),每次查询一行的根元素会太耗时。我想要做的是,添加另一列rootID。因此,如果特定数据的深度为 3 层,则它应该在此列中具有根(0 层)元素的 ID。
有人可以帮我解决这里的查询语法吗?
最佳答案
我假设根元素具有ID = RootID
。由于添加根 ID 是一次性的事情,所以我只是从
UPDATE `table` SET RootID = ID
(当然,在创建新列之后)然后运行类似的内容
UPDATE `table` t1 JOIN `table` t2 ON t1.RootID = t2.ID
SET t1.RootID = t2.ParentID
WHERE t2.ParentID <> 0
重复,直到您看到零行已更新。 (稍后,当您添加新行时,您只需将 RootID 设置为父行的 RootID(如果它有的话),或者设置为其自身 - 您不需要上升到根)。
关于MySQL 查询查找根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217549/