IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Menu déroulant dynamique à 3 niveaux


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    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 : 21
    Points
    21
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une manière classique de faire est d'avoir une seule table categorie avec
    id - nom - id_parent
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    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 : 21
    Points
    21
    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
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    id - nom - id_parent
    -------------------
    1 deco NULL
    2 mobilier 1
    3 chaise 2
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    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
    Invité
    Invité(e)
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    Dernière modification par Invité ; 31/12/2012 à 08h26.

  7. #7
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    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...

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  2. [MySQL] menu déroulant dynamique
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/10/2006, 20h16
  3. menu déroulant dynamique
    Par jojo971 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/06/2006, 14h43
  4. [Conception] Menu déroulant dynamique et administrable
    Par guy2004 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/05/2006, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo