probleme de filtre pour une sous-categorie de categorie

probleme de filtre pour une sous-categorie de categorie - SQL/NoSQL - Programmation

Marsh Posté le 22-03-2010 à 12:06:31    

bonjour à tous
 
Je voudrait sa voir si quelqu'un a déjà eu le mm problème que moi, pour commencer je présente mon espace de travaille :
 
J'ai 4 table : - produits
                 - marques
                 - categories
                 - sous_categories
 
Elles sont comme sa :
 
produits : - id_produits                 .marques : - id_marque                 .categories : - id_categories                 .sous_categories : - id_sous_categories
              - cle_marque                .              - nom                                           - nom                                                       - cle_categorie ( car categoreie a ss-cat sont dans des liste sur la pae d'ajout et les liste sont liée)
              - cle_categorie                                                                                                                                              - nom
              - model  
              - marque  
 
Maintenant le probleme :
 
Je souhaite afficher un produits specifique d'une sous categories alors je tape ceci :
 
SELECT marque.nom, produit.model,  
FROM produit, marque, categories, sous_categories
WHERE cle_marque=id_marque AND produit.cle_categorie=id_categorie AND id_sous_categorie=4 AND id_categorie=12
 
Mais a se moment là j'obtien  tous les produit de la categorie 12 et ils ont tous "id_sous_categorie=4" alors que sur ma page ajout produit un seul a eu 4 pour l'id_sous_categorie
 
Quelqu'un a une piste passe moi je bloque lol
 
 
db-h aka Newbiiz

Reply

Marsh Posté le 22-03-2010 à 12:06:31   

Reply

Marsh Posté le 22-03-2010 à 12:14:39    

je pense qu'il faudrait que je lie sous_categories à produits,... mais omment ds phpMyadmin?

Reply

Marsh Posté le 22-03-2010 à 14:40:54    

personne ne voit?

Reply

Marsh Posté le 22-03-2010 à 15:02:08    

J'ai déjà fait ce genre de classification, moi, j'ai fait une seule table pour les catégories :
Catégories :
- ID,
- Nom
- autres champs...
- ID parent   (qui vaut NULL dans le cas d'une catégorie de premier niveau)
 
Inconvénient de cette modélisation, pour certaines requêtes, faut en lancer plusieurs et faire du récursif. Tu peux regarder dans mon soft icare (cf ma signature) les tables "KeyWords" et "CmpKeyWords" sont modélisées de cette manière.
 
Edit : ce que tu veux faire s'appelle modéliser une arborescence. 2 bon sites à ce sujet :
http://dev.mysql.com/tech-resource [...] -data.html
http://sqlpro.developpez.com/cours/arborescence/


Message édité par rufo le 22-03-2010 à 15:03:31

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-03-2010 à 16:17:25    

super je vais regarder sa tout de suite

Reply

Marsh Posté le 22-03-2010 à 16:54:47    

pour éviter de faire du récursif et de lancer plusieurs requetes pour la méthode de Rufo tu peut utiliser la représentation intervallaire pour l'arborescence de tes catégories
 
cf : http://sqlpro.developpez.com/cours/arborescence/

Reply

Marsh Posté le 22-03-2010 à 19:55:06    

merci les gars il va me falloir un petit tps pour ingurgiter sa donc je m'y met sa a l'aire des bonne piste ;)

Reply

Marsh Posté le 23-03-2010 à 08:21:58    

En restant simple, je pense que tu peux garder tes deux tables : catégorie et sous-catégorie, ca évitera de se prendre la tête plus tard. ça dépend du niveau après...
 
Tu changes dans la table produit : "cle_categorie" => "cle_ss_categorie" (met à jour les clefs étrangères).
 
Maintenant voici la nouveau requête à saisir pour afficher tous les produits de la sous catégorie 4:  

Code :
  1. SELECT marque.nom, produit.model, 
  2. FROM produit, marque, categories, sous_categories
  3. WHERE cle_marque=id_marque AND produit.cle_ss_categorie=id_ss_categorie AND id_sous_categorie=4;


 
Si tu veut tous les produits de la catégorie 6:  

Code :
  1. SELECT marque.nom, produit.model, 
  2. FROM produit, marque, categories, sous_categories
  3. WHERE cle_marque=id_marque AND produit.cle_ss_categorie=id_ss_categorie AND cle_categorie=id_categorie and id_categorie=6;


Peut être mettre des alias au passage.

Reply

Marsh Posté le 23-03-2010 à 09:26:46    

hutarios a écrit :

pour éviter de faire du récursif et de lancer plusieurs requetes pour la méthode de Rufo tu peut utiliser la représentation intervallaire pour l'arborescence de tes catégories
 
cf : http://sqlpro.developpez.com/cours/arborescence/


 
c'est le 2ième lien que j'ai donné. T'as pas du lire mon post :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-03-2010 à 09:28:35    

discmat a écrit :

En restant simple, je pense que tu peux garder tes deux tables : catégorie et sous-catégorie, ca évitera de se prendre la tête plus tard. ça dépend du niveau après...
 
Tu changes dans la table produit : "cle_categorie" => "cle_ss_categorie" (met à jour les clefs étrangères).
 
Maintenant voici la nouveau requête à saisir pour afficher tous les produits de la sous catégorie 4:  

Code :
  1. SELECT marque.nom, produit.model, 
  2. FROM produit, marque, categories, sous_categories
  3. WHERE cle_marque=id_marque AND produit.cle_ss_categorie=id_ss_categorie AND id_sous_categorie=4;


 
Si tu veut tous les produits de la catégorie 6:  

Code :
  1. SELECT marque.nom, produit.model, 
  2. FROM produit, marque, categories, sous_categories
  3. WHERE cle_marque=id_marque AND produit.cle_ss_categorie=id_ss_categorie AND cle_categorie=id_categorie and id_categorie=6;


Peut être mettre des alias au passage.


 
Sauf qu'avec cette structure à 2 tables, il se limite à une arborescence à 2 niveaux pour sa classification. Avec les autres solutions, pas de limite (ou presque) => bien plus souple donc.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 23-03-2010 à 09:28:35   

Reply

Marsh Posté le 24-03-2010 à 08:53:42    

Tout à fait d'accord avec toi.
En gros si ton système est fait pour une bibliothèque : multitude de catégories et sous-catégories, il vaut mieux choisir le récursif.
 
Maintenant si c'est pour un exo "pourris" qui gère une boulangerie, que la BD est déjà faite et qu'on demande juste la requête d'affichage, 1 sous catégorie suffit.
 
Par contre en cas réel : soit prudent en manipulant la base de données : tes changements pourront engendrer des erreurs sur les applications développées par d'autres personnes. Mieux vaut se contenter de chercher la bonne requête d'affichage sans toucher le reste...


Message édité par discmat le 24-03-2010 à 09:06:38
Reply

Marsh Posté le 24-03-2010 à 10:09:30    

rufo a écrit :

 

c'est le 2ième lien que j'ai donné. T'as pas du lire mon post :/

 

oups, j'avais pas fait attention aux urls...  :jap:  :jap:  miles excuses


Message édité par hutarios le 25-03-2010 à 11:54:50
Reply

Marsh Posté le 25-03-2010 à 11:30:51    

Merci pour le débat les gars sa m'a aider.
Effectivement l'affichage en répétition, le plus simple sa a été l'ajout d'une cle_ss_categorie et aussi se qui m'a fait perdre du temps c'est que dans mon formulaire d'ajout des produit la liste de sélection des ss-categorie été relier a cette même table au lieu de la table produits.
 
Top cool se forum j'espère pourvoir quitter mon stade de nwebii et pourvoir avoir des discutions constructive comme vous ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed