Enigme SQL, requête récursive
Résolu
Atropa
Messages postés
1940
Date d'inscription
Statut
Membre
Dernière intervention
-
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
Atropa Messages postés 1940 Date d'inscription Statut Membre Dernière intervention -
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 !
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 !
A voir également:
- Enigme SQL, requête récursive
- Polyland énigme ✓ - Forum Loisirs / Divertissements
- Logiciel sql - Télécharger - Bases de données
- Blob sql ✓ - Forum Webmastering
- Sql (+) - Forum Programmation
- Aidez moi a trouver cette enigme ✓ - Forum Loisirs / Divertissements
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.
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.
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'
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'