Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/12/2012, 09h06   #1
livininchina
Candidat au titre de Membre du Club
 
Homme
Inscription : 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!
livininchina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 09h29   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 861
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 861
Points : 21 924
Points : 21 924
Une manière classique de faire est d'avoir une seule table categorie avec
id - nom - id_parent
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 09h47   #3
livininchina
Candidat au titre de Membre du Club
 
Homme
Inscription : 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
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
livininchina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 09h53   #4
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 861
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 861
Points : 21 924
Points : 21 924
id - nom - id_parent
-------------------
1 deco NULL
2 mobilier 1
3 chaise 2
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 05h33   #5
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 816
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 816
Points : 3 119
Points : 3 119
salut,

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

categories:
Citation:
id
nom
cat_relations
Citation:
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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 08h09   #6
jreaux62
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 3 778
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 46
Localisation : France, Pas de Calais (Nord Pas de Calais)

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

Informations forums :
Inscription : août 2008
Messages : 3 778
Points : 7 778
Points : 7 778
Envoyer un message via Skype™ à jreaux62
@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.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
"Quand le sage montre la lune, le sot regarde le doigt."
Confucius, Homme d'Etat et philosophe chinois (551-479 av. J.-C).
Site perso Mes tutos DVP
Gestion-Affichage de Nouvelles Affichage en tableau HTML Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2012, 16h34   #7
ericd69
Expert Confirmé
 
Avatar de ericd69
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 1 816
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 816
Points : 3 119
Points : 3 119
@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...
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h20.


 
 
 
 
Partenaires

Hébergement Web