PHP/MySQL - la construction d'une hiérarchie du menu nav
Donc le menu final ressemblera à quelque chose comme ceci:
Item B
Item B-1
Item B-1-2
Item B-1-1
Item A
SubItem A-1
SubItem A-2
Item C
Basé sur les éléments suivants DB records:
id menu_title parent_menu_id menu_level weight
1 Item A 0 1 1
2 Item B 0 1 0
3 Item C 0 1 2
4 SubItem A-2 1 2 1
5 Item B-1 2 2 0
6 Item B-1-1 5 3 1
7 SubItem A-1 1 2 0
8 Item B-1-2 5 3 0
Comment pourrais-je aller sur l'affichage? Ma conjecture est qu'il y impliquer le stockage de tous les éléments dans un tableau multidimensionnel, puis en boucle à travers elle de toute façon...
OriginalL'auteur Matt | 2009-01-25
Vous devez vous connecter pour publier un commentaire.
Traiter avec la structure de données que vous l'avez impliquent souvent la récursivité ou plusieurs requêtes pour construire l'arbre.
Avez-vous envisagé d'autres moyens de conserver une hiérarchie? Découvrez modifié pré-commande de la traversée - voici une belle PHP base de l'article à propos de ce.
Sa ne doit pas être rapidement mis à jour constamment, encore si vous utilisez des transactions et des procédures stockées, puis mise à jour/insertion d'erreurs liées à disparaître.
Ce sujet de la mise à jour de l'index lorsque vous ajoutez des nœuds etc. Sur un vaste ensemble de données et rapide des ajouts, cela signifierait tout un tas de mises à jour de l'index
OriginalL'auteur Paul Dixon
Hiérarchique des données est un peu gênant dans un relationsal base de données (à l'exclusion de l'Oracle, qui a des opérateurs dans
START WITH/CONNECT BY
à composer avec cette). Il existe essentiellement deux modèles: liste d'adjacence et imbriqués de jeux.Vous avez choisi d'adjacence des jeux, c'est ce que je fais aussi. Il est beaucoup plus facile à changer que l'ensemble imbriqué modèle, bien que l'ensemble imbriqué modèle peut être retrouvé dans l'ordre correct dans une seule requête. Les listes d'adjacence peut pas l'être. Vous aurez besoin de construire une structure de données intermédiaire (arbre), puis les convertir en une liste.
Ce que je ferais (et l'ont fait récemment en fait) est:
Vous construire quelque chose comme ça:
et de le convertir en ceci:
Le PHP pour générer le menu tableau est assez simple mais un peu compliqué à résoudre. Vous utilisez un appel récursif de l'arbre de marche de la fonction qui génère le HTML liste imbriquée de balisage, mais laissera la mise en oeuvre comme un exercice pour le lecteur. 🙂
découvrez cakePHP mise en œuvre de l'ACL, plus précisément le comportement en Arbre...c'est un peu abstrait, mais encore doit être utile. api.cakephp.org/class_tree_behavior.html
OriginalL'auteur cletus
La façon dont votre stockage de données hiérarchiques n'est pas aussi efficace que vous pourriez vouloir. J'ai lu l'article La gestion Hiérarchique des Données dans MySQL il y a quelques années et ont depuis trouvé que la meilleure solution pour la gestion de la hiérarchie de base de données dans SQL. Meilleur avantage est que je crois que vous pouvez récupérer la totalité de l'arbre avec une seule requête.
OriginalL'auteur David
Je viens de poster une question similaire, ma propre approche de transformer MySQL hiérarchique des données (liste d'adjacence) dans un menu (HTML)
Il ne pas utiliser la récursivité. Et il nécessite un seule requête à la base de données.
Lire plus à
https://stackoverflow.com/questions/2871861#3368622
Grâce.
OriginalL'auteur J. Bruni
Une autre manière simple, vous pouvez générer de la hiérarchie, si vous ne voulez pas utiliser les ensembles imbriqués est d'utiliser une simple chaîne de texte en face.
Deviendrait
Le chiffre en face de chaque élément peut être stocké dans un champ et analysée en fonction de la longueur (ce qui représente la profondeur de l'endroit où il est) pour vous dire tout ce que vous devez savoir sur où il va.
- Je utiliser ensemble imbriqué de hiérarchies pour plus de trucs compliqués qui nécessite le calcul,e tc, mais je trouve cette approche a bien servi
OriginalL'auteur Jas Panesar