captain_torche Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 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 More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Tu es sous Mysql? Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 Oui, j'ai oublié de préciser. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 C'est pas encore possible Sous Oracle oui grâve à "CONNECT BY PRIOR". Cette fonctione devrait voir le jour prochainement sous Mysql ( http://dev.mysql.com/doc/refman/5.0/fr/todo-future.html ) Sinon tu peux le faire en PHP : http://touv.ouvaton.org/spip.php?article8 Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 Ok, merci de ta rapidité, je vais m'orienter dessus Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Et si tu veux développer l'arbo "au click", j'ai un bout de code chez moi Résultat ici : http://kit.portekoi.com/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 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 More sharing options...
JulienCoquet Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 le cache est ton ami Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Quel est le rapport entre une requête récursive et le cache? Et le cache de quoi d'ailleurs? Peux tu "étayer" ta réponse? Lien vers le commentaire Partager sur d’autres sites More sharing options...
JulienCoquet Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 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 More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Le problème n'est pas le moyen mais le fais justement de "générer" l'arbre en lui même Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
JulienCoquet Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 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 More sharing options...
captain_torche Posté 7 Septembre 2007 Auteur Partager Posté 7 Septembre 2007 Pour info, la page est tout de même cachée, après que tout son contenu soit généré (en incluant le fil d'ariane). Mettre le cache juste pour le fil d'ariane, aurait été un peu disproportionné. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 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 More sharing options...
JulienCoquet Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 le but n'étant pas de me vanter (désolé si c'est comme çà que c'est sorti ) 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 More sharing options...
Portekoi Posté 7 Septembre 2007 Partager Posté 7 Septembre 2007 Y a pas de soucis et tu as tout à fait raison de le souligner Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant