Remonter à la racine d'une categorie

Salut à tous…

Le titre du sujet est un peu floue, je ne sais pas comment on appelle cette pratique, mais je vais essayer de l’expliquer.
J’ai une table du genre :

CATEGORY ( id, libelle, sid );

Qui contient pour exemple ces lignes :

1 ; Videos ; 0
2; Jeux ; 0
3 ; Action ; 1
4 ; Tir ; 2

C’est à dire que Action est un sous élément de Videos ( Videos > Action )
Et également que Tir est un sous élément de Jeux ( Jeux > Tir )

J’arrive à récupérer la catégorie d’origine, celle qui a pour sid = 0, je cherche la catégorie racine de Action, je procède comme ceci :

function get_parent_url($pcat_id){
	$sidc = mysql_result(send_sql('SELECT `sid` FROM `category` WHERE `id` = '.$pcat_id),0);
	
	if($sidc == 0) return get_cat_urls($pcat_id);
	else get_parent_url($sidc);
}

Ca marche très bien… ça me retourne Vidéo, seulement, je me demandais s’il n’y avait pas une requête SQL permettant de faire ça en une fois ?
Normalement, il n’y aura pas plus d’un niveau… mais qui sait… et à ce moment là, ça risquerait de faire lourd… étant donné que la fonction serait appellée plus de 20 fois dans la meme page… je ne sais pas vraiment si ça prends énormement de ressources ce genre de requetes, c’est pourquoi je m’adresse à vous.

Merci !!

En général avec un arbre, t’es forcé plus ou moins de passer par une fonction ou de la récursivité.

Sauf à faire une optimisation du genre chaque nœud à un lien vers son parent de niveau 1

L’autre optimisation que tu peux faire, c’est éventuellement de charger tout l’arbre et de tout faire en PHP …
Edité le 11/11/2008 à 17:51

Les deux solutions que tu proposes me conviennent… reste à savoir laquelle je vais choisir…

Hmmm… la solution du champ qui contient son parent est une bonne idée si on a 2 niveaux ou plus… ce qui, je pense, ne sera pas mon cas après moultes reflexions… donc… soit garder le récursivité… soit… tout charger en tete de page… :yeux1:

Sachant qu’il pourrait facilement y avoir 90 lignes, ça vaut le coup tu penses ? Niveau ressources je parle… car y’en a qui ne me serviront pas… je penche plutot pour garder la récursivité, mais je prefere avoir ton avis grand maitre du php :stuck_out_tongue:

Je connais pas tout tes besoins. L’avantage de l’avoir en PHP, c’est pour éviter les X requêtes. Ensuite, t’en auras quand même, mais ça sera moins intense.