Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations forums :
    Inscription : août 2012
    Messages : 37
    Points : 10
    Points
    10

    Par défaut Menu déroulant dynamique à 3 niveaux

    Bonjour à toutes et à tous!

    Je cherche à créer un menu déroulant dynamique à 3 niveaux via ma bdd.
    Le problème c'est que je n'arrive pas à schématiser mes tables pour ce système.

    Je vais vous décrire ce que j'ai en tête mais ça ne m'a pas l'air convainquant et je suis sûr qu'il y a une meilleure façon de faire. J'ai un menu vertical qui permet d'accéder aux catégories de mes produits. Chaque catégories peut avoir une ou des sous-catégories et une ou des soussous-catégories. Donc 3 niveaux.
    En gros il y aura plusieurs catégories de niveaux 1 : bricolage, déco, bijouteries,...
    Dans déco on pourra trouver mobilier, rangement, ... et dans mobilier table, chaise, ...

    J'ai donc pensé faire 3 tables pour mon menu qui serait composées de la manière suivante:
    - category : NumeroCat (clé primaire) + Nom
    - categorySub1 NumeroCatSub1 (CP) + Nom + NumeroCat (copie de la clé primaire table category)
    - categorySub2 NumeroCatSub2 (CP) + Nom + NumeroCatSub1 (copie de la clé primaire NumeroCatSub1)

    Et la table des produits :
    - produits : id (AI - CP) + NumeroCat + NumeroCatSub1 + NumeroCatSub2

    Il me semble que cette dernière table posera des problèmes vu que certains produits seront classés dans des catégories mais pas dans des sous catégories donc des champs seront vide. Peut être je me trompe car je ne vois vraiment pas comment construire ces tables de la façon la plus logique.

    Je vous remercie par avance pour vos conseils!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 205
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 205
    Points : 30 881
    Points
    30 881

    Par défaut

    Une manière classique de faire est d'avoir une seule table categorie avec
    id - nom - id_parent

  3. #3
    Candidat au titre de Membre du Club
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chine

    Informations forums :
    Inscription : août 2012
    Messages : 37
    Points : 10
    Points
    10

    Par défaut

    Merci pour ton intérêt sabotage.

    Pourrais tu détailler davantage s'il te plait?
    Comment se composerait cette table, comme ça :

    id - nom - id_parent
    -------------------
    1 deco NULL
    2 mobilier 1
    3 chaise 1 et 2

    ...etc

    Je vois pas trop

    Merci pour tes conseils

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 205
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 205
    Points : 30 881
    Points
    30 881

    Par défaut

    id - nom - id_parent
    -------------------
    1 deco NULL
    2 mobilier 1
    3 chaise 2

  5. #5
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Dureuil
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2011
    Messages : 1 897
    Points : 3 207
    Points
    3 207

    Par défaut

    salut,

    si tu veux des relations multiples, tu dois utiliser une table de liaison:

    categories:
    id
    nom
    cat_relations
    id
    id_cat
    id_parent
    c'est cette table qui code les relations entre les catégories:
    • id_cat désigne une catégorie
    • id_parent désigne le parent de la catégorie. contrairement à la technique que t'a montré sabotage, tu n'as jamais d'id_parent à null, une ligne dans cette table correspond à une relation entre 2 catégories...

    l'avantage c'est que tu peux avoir autan de relations parent/enfant que tu veux

    avec ça tu as les 2 principales façons d'aborder les arborescences d'une manière simple
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #6
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro Jérôme Réaux
    Webdesigner
    Inscrit en
    août 2008
    Messages
    5 374
    Détails du profil
    Informations personnelles :
    Nom : Homme Jérôme Réaux
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 5 374
    Points : 10 320
    Points
    10 320

    Par défaut

    @ericd69 Il n'est pas utile pour l'instant de l'embrouiller avec 2 tables.

    Pour reprendre le modèle de Sabotage, avec une seule table :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    id - 	nom - 		id_parent - rang
    -------------------
    1 	mobilier 	0	1
     11 	salon 		1	1
      111 	Canapé		11	1
      112 	rangement	11	2
      113 	fauteuil	11	3
      114 	table		11	4
      115 	meuble TV	11	5
     12 	chambre 	1	2
      121 	adulte 		12 	1
      122 	enfant 		12 	2
      123 	bébé 		12 	3
     13 	rangement 	1	3
     ...
     14 	bureau 		1	4
     ...
     
    2 	decoration 	0	2
     21 	luminaire 	2	1
      121 	lampe 		21	1
      122 	éclairage 	21	2
      123 	plafonnier 	21	3
     22 	objet deco 	1	2
     ...
    - menu 0 : id_parent = 0
    - sous-menu 1 : id_parent = id (du menu 0 parent)
    - sous-menu 2 : id_parent = id (du sous-menu 2 parent)
    - Le rang permet de classer les rubriques (et de pouvoir changer l'ordre d'affichage, éventuellement, sans changer les id)

    Pour info, Joomla ou Wordpress (pour ne citer d'eux) utilisent cette méthode pour créer des menu/sous-menus via l'admin.

    Si on prend cet exemple, on trouve 4 niveaux de menu/sous-menus.
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  7. #7
    Expert Confirmé Avatar de ericd69
    Homme Profil pro Eric Dureuil
    Développeur informatique
    Inscrit en
    avril 2011
    Messages
    1 897
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Dureuil
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : avril 2011
    Messages : 1 897
    Points : 3 207
    Points
    3 207

    Par défaut

    @jreaux62

    il n'a pas à être embrouillé, c'est pas plus compliqué que de maintenir le compteur pour le rang, et si je lui propose ça c'est parce qu'il donne un exemple de sous catégories avec plusieurs antécédents (parents). hors si les éléments sont affiliés à une seuls catégorie ensuite ta structure est inadaptée par contre

    avec cette structure on évite la répétition de texte dans ce cas, la tienne est plus dédié as des données non répétitives ou quand les répétition sont des occurrences indépendantes... je l'utilise pour stocker l'arborescence de balises html en bd par exemple...

    ici ça permet, accessoirement, de compacter les tables et les données dans les buffers mysql pour le même résultat

    après, sur des petites structures, les 2 sont à peu près équivalentes en terme de performances
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •