smile Posté 24 Novembre 2003 Partager Posté 24 Novembre 2003 Hello, Je suis en train de bosser sur un script annuaire, categories illimités. mais ca pose quelques problèmes, surtout algorithmique au niveau des categories. ma table est composée d'une cat_id et d'une cat_parent exemple : 1>histoire >0 2>contemporaine>1 3> moyen age> 1 4> geographie >0 5> guerre du golf >2 et ben là j'ai beau retourner le problème dans tous les sens, il me manque toujours une partie de plus si je fait une jointure avec ma table liens, là c'est pire. donc ma question doit-on obligatoirement passé par une fonction recursive, en combien de requettes peut on afficher toute l'arborescence ? Merci par avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
Beatnykk Posté 25 Novembre 2003 Partager Posté 25 Novembre 2003 salut désolé mais je comprend pas du tout ton problème, ni le sytème que tu souhaites mettre au point. je suis peut être le seul, mais je trouve ça pas clair ton explication... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cariboo Posté 25 Novembre 2003 Partager Posté 25 Novembre 2003 donc ma question doit-on obligatoirement passé par une fonction recursive, en combien de requettes peut on afficher toute l'arborescence ? Ta question n'est pas très claire : tout dépend de ce que tu veux faire... Mais admettons que tu veuilles tout bonnement afficher un item, et le chemin qui mène à cet item Bref tu as une table baptisée items id_item libelle cat_id En affichant cet item, tu peux récupérer l'ID de catégorie, mais pas le chemin... tu peux effectivement appeler une fonction récursive, baptisée aff_chemin($categorie), qui s'appelle elle-même, tant que le cat_parent n'est pas égal à zéro... L'idée (c'est peut-être ça qui bloquait) c'est de construire le chemin à l'envers (de la droite vers la gauche) Etape 1. Guerre du Golfe Etape 2. Histoire Contemporaine>Guerre du Golfe Etape 3. Home>Histoire Contemporaine>Guerre du Golfe En attendant tes précisions, voila les premiers éléments que je peux te donner Lien vers le commentaire Partager sur d’autres sites More sharing options...
smile Posté 25 Novembre 2003 Auteur Partager Posté 25 Novembre 2003 (modifié) Oui merci cariboo, c'est exactement ca, je l'ai fait en commencant en effet à l'envers mais mon problème c'est que j'aimerai aussi afficher les categories du meme niveau, tout developper en fait. un arbre binaire en fait : >Histoire >> Contemporaine >>>> Guerre du Golfe >> Moyen age Vous m'avez compris ou c'est moi qui m'exprime mal Modifié 25 Novembre 2003 par smile Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cariboo Posté 25 Novembre 2003 Partager Posté 25 Novembre 2003 Pour faire ça, c'est la fonction récursive inverse... Tu commences d'abord par lancer une requête sur les têtes de rubriques SELECT * from categories where cat_parent=0 Sur chacune des catégories ainsi extraites, tu lances une fonction recursive, qui s'appellerait plutôt affiche_enfants($categorie) cette fois-ci. L'idée, c'est de lancer une requête pour savoir s'il y'a des enfants $query="SELECT * from categories where cat_parent=".$categorie Si oui, (resultat non vide) on boucle sur le tableau des catégories renvoyées, et on rappelle la même fonction affiche_enfants pour les catégories enfants du niveau suivant... Si non, la fonction récursive s'arrête... Ca marche bien, mais ça génère des requêtes dans tous les sens, ce qui en terme de performance n'est pas terrible, terrible... Deux solutions : mettre la page générée dans un cache, pour éviter de trop pomper sur la base de données SQL pour pas grand chose... Ou mettre toutes les categories dans un tableau, avec un select * from categories (il faut pour cela que la table categories ne soit pas trop grande). Après tu peux travailler avec des variables tableaux en mémoire, ce qui en terme de performance est bien mieux... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 25 Novembre 2003 Partager Posté 25 Novembre 2003 Bonjour, en fait, c'est un peu le principe de ce forum. Quand on demande à afficher un message, le programme cherche à quelle catégorie il appartient, puis à quelle catégorie appartient cette catégorie, etc, jusqu'à remonter à la racine. A l'inverse, quelqu'un qui est à l'index des forums peut voir toutes les catégories, et pourquoi par, les premieres sous catégories. Le principe du forum.. Pour cela, il vaut mieux effectivement dépiler toutes tes catégories, et ensuite seulement, travailler avec le tableau généré. A+, Anonymus. Lien vers le commentaire Partager sur d’autres sites More sharing options...
smile Posté 25 Novembre 2003 Auteur Partager Posté 25 Novembre 2003 Merci de vos réponses, en effet ca y'est je viens d'afficher toute l'arborescence sur une page test. J'ai effectivement travailler avec des tableaux, cette page test sera en cache pour eviter de prendre pas mal de ressources. Mais là je vois que je ramolis, pas mal d'heures que j'y suis dessus... c'est pas etonnant que je me suis tapé un carton en cours d'algo 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