Enigme SQL, requête récursive

Résolu/Fermé
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 17 févr. 2012 à 18:11
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 18 févr. 2012 à 02:55
Bonjour,

Le but est de récupérer des articles suivant leur catégorie.

Soit une table article contenant :

id : identifiant de l'article.
idCat : identifiant de catégorie à laquelle il appartient
...

et une table categorie contenant :

id : identifiant de la catégorie
idCatParent : identifiant de la catégorie parent
...

si idCatParent == 0, nous sommes à la racine.

si idCatParent != 0 la catégorie a une catégorie parent

Comment récupérer l'identifiant de tout les articles d'une catégorie et de ses sous-catégorie, sur une profondeur théoriquement infini, en un minium de requêtes SQL ?

Merci pour le temps consacré à mon problème !

2 réponses

Salut, je dirait d'abord que l'analyse du système d'information est mal faite puisque le niveau d'une sous-catégorie n'est pas pris en compte(il devrait pourtant être dans le Dictionnaire des Données si on se fie à Merise).

En une requête avec la sous-requête:
D'abord la sous requête
SELECT id.c, idCat.c FROM article a, categorie c WHERE id.a='valeur' AND idCatParent.c=categorie.c OR id.c=categorie.c;

donnes tous les catégorie pour l'id d'un article.

Après avec des sous-requêtes il y a sûrement façon d'avoir toutes les catégories enfant.

SELECT idCat.cat, id.art FROM categorie cat, article art WHERE idCatParent=(SELECT idCat.c FROM article a, categorie c WHERE id.a='valeur' AND idCatParent.c=categorie.c OR id.c=categorie.c );


ça devrait être bon, à tester.
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
18 févr. 2012 à 02:55
Merci pour ta réponse.

en fait le problème est dans l'autre sens.

c'est pour récupérer les articles par rapport a une catégorie et non les catégories parents d'un articles.

J'ai changé la structure de ma table categorie pour y mettre des "bordures". ce sera plus simple.

ca devrait ressembler a :

SELECT article.id FROM article, categorie WHERE article.idCat = categorie.id && categorie.bT >= 'valeurCategorieBT' && categorie.bB >= 'valeurCategorieBB'
0