Aller au contenu

Requête récursive ?


captain_torche

Sujets conseillés

Bonjour,

J'ai une structure de table assez simple : chaque page possède un id, et l'id de la page parent. Je peux donc avoir une architecture hiérarchique étendue.

Pour la création d'un "fil d'ariane", j'aimerais, de la manière la plus simple possible pouvoir retourner, depuis un ID donné, tous les éléments parents jusqu'à la racine.

Est-ce possible en une seule requête ?

Lien vers le commentaire
Partager sur d’autres sites

Avec une arborescence par adjacence, sans utiliser la récursivité (ce qui implique en l'occurrence plus d'une requête) ce n'est pas possible. À moins de stocker une information supplémentaire pour la page représentant l'arborsence (c'est ce qu'on appelle un chemin matérialisé, du genre "1.1.3", l'ordre des ID correspondant à la hiérarchie).

Par contre avec une arborescence avec un parcours prédéfini (par exemple Nested Sets), en une seule requête tu peux obtenir cette information. J'avais écrit un article au sujet des Nested Sets (il me semble l'avoir déjà cité ici). L'avantage de cette solution et la rapidité d'accès, par contre les modifications de la structure prennent plus de temps (plus la structure est grande, car il faut mettre é jour tous les noeuds en aval).

Lien vers le commentaire
Partager sur d’autres sites

sur de gros volumes de relations hierarchiques, on a généralement intérêt à faire appel a un fichier cache pour éviter de faire tourner la requete à chaque fois, surtout si la récursivité de la chose fait que de nombreuses requêtes sont éxécutées...

donc en gros, on peut générer un arbre sous forme de fichier texte ou XML qui peut être traité de façon plus souple que d'éxécuter la requête à chaque fois.

çà répond à la question?

Lien vers le commentaire
Partager sur d’autres sites

Et un système de cache pour gérer un simple fil d'ariane, c'est un peu sortir un bazooka pour achever un moustique ;)

je travaille avec des bases de données qui pèsent jusqu'à 4Go; chacun son truc, hein? ;)

Et pour Portekoi, j'essaie de prévoir ce qui va se passer pendant l'exploitation pour limiter les dégats ;)

Lien vers le commentaire
Partager sur d’autres sites

je travaille avec des bases de données qui pèsent jusqu'à 4Go; chacun son truc, hein? ;)

Et pour Portekoi, j'essaie de prévoir ce qui va se passer pendant l'exploitation pour limiter les dégats ;)

Cela ne veut rien dire. J'ai bossé pour Renault et 4 Go, c'est rien. C'est pas pour autant que je m'en vante, chacun son truc ;)

Lien vers le commentaire
Partager sur d’autres sites

le but n'étant pas de me vanter (désolé si c'est comme çà que c'est sorti :blushing: ) mais d'illustrer que ce genre d'opérations récursives sont hyper consommatrices de ressources.

voilà c'est tout :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...