l'ordre sql hiérarchie de l'arbre de

Quelle est la meilleure façon de trier un tableau comme ceci:

CREATE TABLE category(
    id INT(10),
    parent_id INT(10),
    name VARCHAR(50)
);

INSERT INTO category (id, parent_id, name) VALUES
(1, 0, 'pizza'),        --node 1
(2, 0, 'burger'),       --node 2
(3, 0, 'coffee'),       --node 3
(4, 1, 'piperoni'),     --node 1.1
(5, 1, 'cheese'),       --node 1.2
(6, 1, 'vegetariana'),  --node 1.3
(7, 5, 'extra cheese'); --node 1.2.1

De faire le tri de façon hiérarchique par id ou nom:

"pizza" //node 1

'piperoni' //node 1.1

"fromage" //node 1.2

"extra fromage" //node 1.2.1

'vegetariana' //node 1.3

'burger' //node 2

'café' //node 3

EDIT: le numéro à la fin de la nom est de visualiser la structure de mieux, ce n'est pas pour le tri.

EDIT 2: comme mentionné à plusieurs reprises ... le nombre à la fin de la name "fromage 1.2" était uniquement pour la visualisation but, PAS pour le tri. J'ai déménagé comme des commentaires, trop de gens n'ai pas compris, désolé.

  • Oracle a une façon de le faire avec START WITH parent_id = 0 CONNECT BY PRIOR id = parent_id ORDER SIBLINGS BY id ASC. Je pense que MySQL n'ont pas de telles requêtes hiérarchiques.
  • en fait presque tous les SGBD à l'exception de quelques (y compris MySQL) peut faire quelque chose comme ça à l'aide d'une expression de table commune récursive.
  • est le tableau de la structure déjà défini ou vous êtes dans la phase de planification et pourrait choisir une autre structure? combien de candidatures avez-vous un plan du tableau ? est-il modifié souvent ou est-il important d'avoir de nombreux accès en lecture à ce sujet ?
  • plus de colonnes peuvent être ajoutées (top_parent_id, depth_level ..) mais je suis à la recherche de solution dans cette structure si possible. La profondeur peut être ajouté (l'arbre n'est pas limitée à 3 niveaux), mais en général, il ne devrait pas être plus de 50 à 100 entrées et de vitesse pour cette requête n'est pas un problème.
  • Voir la Gestion Hiérarchique des Données dans MySQL pour un certain nombre de recettes.
  • Vous feriez bien de revoir DONC, la question que j'ai écrit sur ce sujet: stackoverflow.com/questions/4048151/...

InformationsquelleAutor d.raev | 2013-02-15