在表中递归查找某些内容的最有效方法?

时间:2010-10-11 08:15:25

标签: mysql

我有一个表users,其中包含以下列

id INT PRIMARY
username
target
dead

target包含同一个表中另一个用户的id。所有用户都以0开始死亡。如果死亡是1,那么这意味着他们已经死了。随着时间的推移,死亡可以改变,但目标列将始终保持其开始的状态。

如果用户死亡,他们的目标就会成为杀死他们新目标的人。因此,如果我试图找到用户A的当前目标,我将首先找到他们的原始目标,如果该目标已经死亡,则移动到该目标的目标,依此类推,直到找到一个尚未死亡的目标。那将是用户A的当前目标。

目前我有这个查询只是给我原始目标

SELECT `a`.`username`, `a`.`dead`, `b`.`username` 
FROM `users` AS `a` LEFT JOIN (`users` AS `b`) 
ON (`a`.`target` = `b`.`id`)

但不知道如何添加它以给我当前的目标。

1 个答案:

答案 0 :(得分:0)

使用“représentationselaylaire”更有效地使用递归,看看http://sqlpro.developpez.com/cours/arborescence/