2010-10-11 8 views
1

I ont une table users avec les colonnes suivantesLe moyen le plus efficace de trouver quelque chose de façon récursive dans une table?

id INT PRIMARY 
username 
target 
dead 
cible

contient un identifiant d'un autre utilisateur dans le même tableau. Tous les utilisateurs commencent avec dead comme 0. Si dead est 1, cela signifie qu'ils sont morts. Avec le temps, les morts peuvent changer, mais la colonne cible restera toujours avec ce qu'elle a commencé.

Si un utilisateur meurt, sa cible devient celle qui a tué sa nouvelle cible. Donc, si j'essaie de trouver la cible actuelle de l'utilisateur A, je devrais d'abord trouver leur cible d'origine, et si cette cible est morte, déplacez-vous sur la cible de cette cible, et ainsi de suite jusqu'à ce que j'en trouve une. et ce serait la cible actuelle de l'utilisateur A.

Actuellement, je cette requête qui me donne juste l'objectif initial

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

Mais ne sais pas comment y ajouter pour me donner la cible actuelle.

+0

Question intéressante - peut être difficile à faire dans mySQL seul. De quelle langue/plateforme faites-vous cela? –

+0

PHP. Je sais que je peux juste ajouter une autre colonne 'current_target' et la mettre à jour chaque fois que quelqu'un meurt. Mais je veux savoir s'il est possible de ne pas utiliser une seule requête. – fent

Répondre

0

La récursivité est utilisée plus efficacement avec "représentation intervallaire", jetez un oeil sur http://sqlpro.developpez.com/cours/arborescence/.

+0

+0, Bien si (indice :) les ensembles imbriqués ne sont pas (conceptuellement) assez durs pour un premier venu, vous avez dû lier un article en français! : P – Unreason

+0

Désolé je suis français je ne connais aucun article en anglais ^^ ' – MatTheCat

Questions connexes