2009-09-15 2 views

Répondre

3

Eh bien, le système de base de données peut exécuter la requête de plusieurs façons différentes avec le même résultat, mais voici une façon de comprendre ce qui se passe:

Prenez 2 copies de la table nested_category, un parent du nom et l'autre nom nœud. Trouvez la ligne dans le parent nommé ELECTRONICS (l'article que vous liez implique qu'il n'y en a qu'un). La plage parent.lft à parent.rgt donne tous les nœuds avec ELECTRONICS comme ancêtre dans l'arbre, à n'importe quelle profondeur. Le tri par Nœud.lft signifie que vous obtiendrez les sous-nœuds de l'ÉLECTRONIQUE le long du côté gauche du sous-arbre en premier, dans un pre-order traversal.

Il pourrait être plus facile de marcher à travers un exemple plus simple de comprendre ceci: si nous choisissons TELEVISIONS au lieu de l'électronique comme parent:

L'ensemble « parent » a seulement 1 rang, en raison de [parent.name = 'TELEVISIONS']:

{ name: "TELEVISIONS", lft: 2, rgt: 9 } 

L'ensemble 'de noeud' a les 4 lignes qui satisfont [node.lft entre 2 et 9] car on peut substituer les valeurs lft/RGT simples de parent:

{ name: "TELEVISIONS", lft: 2, rgt: 9 } 
{ name: "TUBE",  lft: 3, rgt: 4 } 
{ name: "LCD",   lft: 5, rgt: 6 } 
{ name: "PLASMA",  lft: 7, rgt: 8 } 

Et, comme vous pouvez le voir, les 4 lignes ci-dessus sont déjà triées par des valeurs "lft", donc pour satisfaire la requête, nous prenons simplement les valeurs du nom et nous avons terminé.

+0

Merci pour l'explication claire :) – alimango

Questions connexes