|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 10 ![]() |
Bonjour,
Je mets en place actuellement un catalogue de produits enregistré dans une base de données MySQL où chaque produit peut appartenir à une ou plusieurs catégories. Structure de la table "catalogue_produit" (simplifiée) : id smallint(5) categorie smallint(3) nom varchar(40) Structure de la table "catalogue_categorie" (simplifiée également) : id smallint(3) nom varchar(40) parent smallint(3) Les champs catalogue_produit.categorie et catalogue_categorie.id sont liés. Je vais tâcher de vous prendre un exemple parlant… Dans la table catalogue_produit, j'ai : id=1, categorie=3, nom=Maquereau blanc id=2, categorie=4, nom=Tyrannosaure Dans la table catalogue_categorie, j'ai : id=1, nom="Poisson", parent=0 id=2, nom="Poisson de mer", parent=1 id=3, nom="Maquereau", parent=2 id=4, nom="Dinosaure", parent=0 Le produit Maquereau blanc appartient directement à une catégorie, qui elle-même appartient à 2 autres catégories, ce qui fait 3 en tout. Le Tyrannosaure n'appartient qu'à une seule catégorie (car n'a pas de parent). Je voudrais construire une ou plusieurs requêtes, les plus optimisées possibles, qui me permettent d'afficher : - Le nom du produit - La ou les catégorie(s) auxquelles il appartient Est-ce possible ainsi ou dois-je revoir la structure de mes tables ? Serait-ce plus pratique d'avoir 3 tables comme ceci : catalogue_produit id smallint(5) nom varchar(40) catalogue_categorie id smallint(3) nom varchar(40) parent smallint(3) catalogue_correspondance produit_id smallint(5) categorie_id smallint(3) Merci pour votre aide ! |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 850 ![]() |
salut,
déjà, combien de niveau compte ta hiérarchie de catégories? est ce 2 maximum ou ouvert?
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 10 ![]() |
La hiérarchie est ouverte, je souhaite, dans l'absolu, pouvoir créer un nombre infini de catégories.
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 850 ![]() |
donc déjà tu devras passer par une récursion donc une procédure stockée pour ça
tu peux aussi faire une table de liaison plutot que mettre 1 seul catégorie d'origine à ton produit type_produit id idproduit idcat
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Pffff, la récursion sous MySQL, quelle galère... En effet, il ne connaît pas les requêtes récursives.
Sinon, tu peux plutôt essayer de mettre en place une structure comme celle présentée dans le tutoriel suivant : http://sqlpro.developpez.com/cours/arborescence/. C'est un peu plus lourd à gérer, a priori, mais ça facilite grandement la gestion des arborescences.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 850 ![]() |
c'est clair, mais les requêtes hiérarchique, il y a pas beaucoup de sgbd qui les supporte de toute façon
si tu fais une récursion, pense à monter le nombre max de niveau de récursion autorisé qui est à 0 par défaut, le maximum est 255:
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Citation:
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Eric DureuilDéveloppeur informatique Inscription : avril 2011 Messages : 850 ![]() |
oui mais pas toujours aussi bien (question perf) que oracle ou sql server ou db2
et en tous cas, mysql est archi pas près de le faire donc ça règle pas son pb :p
__________________
Eric Dureuil, développeur web, c/c++, java indépendant soyons ![]() pensez à mettre et
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com