frbos
Messages postés27Date d'inscriptionvendredi 4 novembre 2011StatutMembreDernière intervention 4 novembre 2011
-
23 nov. 2007 à 09:23
dsaunier
Messages postés12Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention25 novembre 2007
-
24 nov. 2007 à 10:23
Bonjour
J'ai une table contenant des "CATEGORIES" de la forme :
ID | nom_categorie | IDParent
J'ai donc des categories, sous-categories, sous-sous categories, etc...
Ces categories sont utilisees dans une table "INCIDENTS"
Est-il possible de faire une requete recuperant tous les incidents d'une categorie ET de toutes ses sous-categories ?
Merci
J'utilise MSSQL
frb
dsaunier
Messages postés12Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention25 novembre 2007 24 nov. 2007 à 10:23
Bonjour,
Sous Oracle (desole, je n'ai jamais utilise MSSQL), le plus simple est de cree une vue du type (categorie et 1ere sous-categorie):
CREATE VIEW CATEGORIES...suivant la syntaxe MSSQL
AS(
SELECT
C1.ID IDCAT, C2.ID , C1.NOM_CATEGORIE AS CATEGORIE, C2.NOM_CATEGORIE AS SOUS_CAT
FROM CATEGORIES C1 INNER JOIN CATEGORIES C2 ON (C2.IDPARENT=C1.ID)
WHERE C1.ID_PARENT IS NULL
UNION ALL
SELECT ID IDCAT, ID , NOM_CATEGORIE AS CATEGORIE, '' AS SOUS_CAT
FROM CATEGORIES
WHERE ID_PARENT IS NOT NULL
)
en gros, tu demande les enregistrements de C2 dont l'ID_PARENT est egal à l'ID que tu selectionne ds C1 + la categorie elle-meme si tu peux caracteriser un incident simplement par une categorie.
Ensuite, tu dois avoir une autre table INCIDENT par exemple avec une cle etrangere vers ta table categorie par ex IDCAT et donc ta requete final pour avoir tes incidents sera du type:
SELECT I.*, C.*
FROM INCIDENT I INNER JOIN CATEGORIES C ON C.ID=I.IDCAT
WHERE C.IDCAT=1
Cela doit pouvoir etre optimisable ms je n'ai pas de bdd sous la main...
A adapter en fonction de la profondeur de tes sous-cat ( ds ta vue, tu rajoute autant de left outer join sur ta table categorie que de nombre de sous-sous-sous...categorie).