MySQL 查询查找根元素

标签 mysql

注意:这实际上是一个论坛的数据库。

我陷入了一个有趣的问题。我创建了一个包含以下字段的数据库

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/

相关文章:

MySQL:源错误 2?找不到文件

mysql - 如何在触发器中声明变量,因为MySQL表示 'id_productos'中的未知列 'where clause'

MySQL LONGTEXT 不接受撇号 '

php - 我在运行查询时在mysql中收到以下错误

mysql - 如何在动态MYSQL存储过程中从空参数值获取结果

mysql - 从 MySql 表中选择并删除 x 行

php - 如何获得标记列表的第二个最大值?

mysql - SQL 从表中选择 MAX 和 MIN 值

mysql - 无法存储我在存储过程中输出的值

java - SQL异常 : executeQuery method can not be used for update