Question

Comment vous interrogez un modèle de jeu imbriqué avec des racines multiples, ces arbres dans la même table? À l'heure actuelle, j'ai ajouté une colonne supplémentaire appelée la « racine » indiquant l'ID du nœud racine pour tous les nœuds sous-arbre, cependant, je ne peux pas le sql pour les récupérer dans le bon ordre

Je fais référence à l'article Gestion des données hiérarchiques dans MySQL .

Normalement, la requête pour récupérer les éléments dans l'ordre est l'ordre de la valeur de la feuille gauche, mais avec des racines multiples, vous pouvez vous retrouver avec plusieurs « gauche: 1 » l'un après l'autre, telle rupture de l'arbre.

J'utilise actuellement une solution totalement sans rapport avec SQL. Je les ai réarrangés dans mon code C #, mais je me demande s'il y a un moyen de le faire avec SQL et comme économiser le temps passé sur le serveur Web

Une dernière question. Si j'ai un filtre et il filtre des données de l'arbre, comment gérez-vous cela?

Dis

  • Tâche 1 (En cours)
    • Tâche 2 (Active)
      • Tâche 3 (active)

Si le filtre est de montrer tout arbre avec le statut « Actif », que faites-vous?

Était-ce utile?

La solution

« racines multiples » signifie simplement que vous commencez au premier niveau et en omettant la racine « vrai » tout à fait. Ainsi,

 Root1 (1, 4)
   Node1 (2, 3)

 Root2 (5, 12)
   Node21 (6, 7)
   Node22 (8, 11)
     Node221 (9, 10) 

Do PAS redémarrer la séquence sur les index gauche / droite; vous seriez marcher dans un monde de mal.

En ce qui concerne votre question va de filtre, il est purement une question de présentation. Il existe différentes façons de gérer cela; celui que j'utilisé dans le passé était de montrer tous les nœuds du chemin menant au nœud qui répond à vos critères de filtre, mais sélectionnez « filtré » les noeuds différemment et les rendre à une action (par exemple, ne peut pas être sélectionné dans l'interface utilisateur, les opérations ne peuvent être effectuées sur eux, etc ...). Quelque chose comme:

Task 1 (In progress) [greyed out, inactive]
 +Task 2 (Active)
  +Task 3 (Active)

Une autre approche consiste à utiliser la grille / combo arbre pour afficher les résultats du filtre où chemin vers le noeud est représentée aplatie, mais des noeuds sous le noeud (le cas échéant) sont présentés sous forme d'arborescence. Quelque chose comme:

Task1 -> Task 2 (Active)
 + Task 3 (Active)
Task1 -> Task 4 -> Task 6 (Active)
 + Task 7 (Active)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top