2010-10-11 20 views
1

我有一个表users有以下的列在表格中递归地找到某些东西的最有效方法?

id INT PRIMARY 
username 
target 
dead 

目标包含在同一个表的另一个用户的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`) 

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

+0

有趣的问题 - 在mySQL中可能很难做到。你从中得到什么语言/平台? – 2010-10-11 08:20:06

+0

PHP。我知道我可以添加另一列'current_target'并在每次有人死亡时更新它。但是我想知道是否可以不使用一个查询。 – fent 2010-10-11 08:21:21

回答

0

通过“représentationintervallaire”更有效地使用递归性,请参阅http://sqlpro.developpez.com/cours/arborescence/

+0

+0,如果(提示:)嵌套集合对于第一个角色来说不够(概念上)不够,那么你必须用法语链接一篇文章! :P – Unreason 2010-10-11 11:30:17

+0

对不起,我是法国人我不知道任何英文文章^^' – MatTheCat 2010-10-11 11:56:40

相关问题