Discussion:
Recursivite...
(trop ancien pour répondre)
VooDoo
2007-10-16 13:09:50 UTC
Permalink
Bonjour,

j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
j'ai une table categorie dans laquelle, j'ai :
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description

Il n'y a pas de limite dans le nombre de sous categories...
Je cherches a afficher de maniere sympa les categories et afficher
l'arborescence complete de la ou on se trouve.
J'y arrive, mais ca marche plus au dela de 2 niveaux, et je vois bien qu'il
faut que j'ecrives autrement si je ne veux pas etre confronté a une limite
de niveaux...

Quelqu'un peut m'aider a ecricre une fonction qui remonte jusqu'a la
categorie racine (id=10) en recuperant toutes les sous categories trouvées à
partir d'une categorie donnée? (celle ou se trouve le user...)

Merci pour vos conseils!
A+
VooDoo
Mickael Wolff
2007-10-16 14:39:50 UTC
Permalink
Post by VooDoo
Bonjour,
j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description
Il n'y a pas de limite dans le nombre de sous categories...
Donc un arbre <http://sql.developpez.com/arborescence/>.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
CrazyCat
2007-10-16 14:39:50 UTC
Permalink
Post by VooDoo
Il n'y a pas de limite dans le nombre de sous categories...
Je cherches a afficher de maniere sympa les categories et afficher
l'arborescence complete de la ou on se trouve.
Quelqu'un peut m'aider a ecricre une fonction qui remonte jusqu'a la
categorie racine (id=10) en recuperant toutes les sous categories trouvées à
partir d'une categorie donnée? (celle ou se trouve le user...)
Je ferais ça avec une petite classe relativement simple:

class arbo {
function arbo($table) {
$this->__construct($table);
}

/**
* Constructeur, génère un tableau représenatnt l'arborescence
* @param string $table
*/
function __construct($table) {
$sql = mysql_query("SELECT * FROM `".$table."` ORDER BY
parent_id ASC, ordre ASC");
while ($row = mysql_fetch_arry($sql)) {
if ($row['parent_id']!= 0) {
$this->Arr_arbo[$row['parent_id']]['child'][] = $row['id'];
}
$this->menu[$row['id']] = $row;
}
}

/**
* Retourne les parents de la rubrique courante
* @param integer $id
*/
function getparent($id) {
if ($this->menu[$id]['parent_id'] != 0) {
$this->parent[] = $this->menu[$id]['parent_id'];
$this->getparent($this->menu[$id]['parent_id']);
}
if (is_array($this->parent)) {
krsort($this->parent);
}
}
}

et il te suffit de faire:
$mytree = &new arbo('table');
$parents = $mytree->getparent(X);

avec X qui est l'id de la rubrique où tu es, $parents sera un tableau
avec la liste des parents (de 0 à X-1)
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
VooDoo
2007-10-22 07:28:55 UTC
Permalink
Merci pour vos réponses.
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon pour
pouvoir appliquer les autres....
Apparement meme celle de Crazy j'ai du mal...

mon tableau reste toujours NULL...
et je vois pas ce qui cloche!!

Crazy tu peux m'eclairer???
Mihamina Rakotomandimby
2007-10-22 12:47:18 UTC
Permalink
Post by VooDoo
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon pour
pouvoir appliquer les autres....
Ben je compare la mienne et celle de CrazyCat:
- la mienne ne fait pas appel à des notion d'objet (ça n'est ni meilleur
ni moins bien).
- la mienne est un poil plus détaillée (je pense que tu n'as pas eu le
courage de lire les détails fournis)

De plus, plutot que de nous donner ce que donne telle ou telle méthode,
tu pourrais analyser le code et demander des explications sur telle ou
telle portion que tu ne comprends pas.
CrazyCat
2007-10-22 13:49:23 UTC
Permalink
Si tu y tiens, bien que je ne vois pas l'intérêt qu'il y a...
Post by Mihamina Rakotomandimby
- la mienne ne fait pas appel à des notion d'objet (ça n'est ni meilleur
ni moins bien).
En effet, mais c'est la lutte habituelle entre l'objet et le procédurale.
Pour ma part, j'ai en fait réduit un objet que j'utilise fréquemment
pour l'adapter aux besoins de Voodoo, et je suis partisan de l'objet car
on peut ensuite l'étendre facilement pour avoir plus de choses.
Post by Mihamina Rakotomandimby
- la mienne est un poil plus détaillée (je pense que tu n'as pas eu le
courage de lire les détails fournis)
J'ai fourni un code parlant de lui-même, l'avantage des objets c'est
qu'on peut les utiliser comme des black-boxes.

Tu as oublié en passant ce que j'appellerais un petit avantage de mon
système sur le tien: compte le nombre de requètes SQL.
J'avoue que je génère quelques variables qui, dans un cas extrème,
pourraient être assez énormes (vu que je met toute l'arbo en mémoire),
mais je doute que cela épuise réellement le système.
Post by Mihamina Rakotomandimby
De plus, plutot que de nous donner ce que donne telle ou telle méthode,
tu pourrais analyser le code et demander des explications sur telle ou
telle portion que tu ne comprends pas.
Là je suis d'accord: quand on a un soucis, on essaye de préciser où est
le soucis ou quels sont les symptomes :)
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
P'tit Marcel
2007-10-24 09:57:57 UTC
Permalink
Post by CrazyCat
Tu as oublié en passant ce que j'appellerais un petit avantage de mon
système sur le tien: compte le nombre de requètes SQL.
J'avoue que je génère quelques variables qui, dans un cas extrème,
pourraient être assez énormes (vu que je met toute l'arbo en mémoire),
mais je doute que cela épuise réellement le système.
Mes deux centimes d'euros :

1- Il vaut mieux n'extraire que les données dont on aura besoin. Ici,
c'est "l'arborescence complete de la ou on se trouve" et non toute l'arbo

2- J'ai toujours très peur d'un traitement récursif qui stocke ses
données en mémoire car la récursivité a potentiellement un déploiement
exponentiel. Même si php gère mieux les "grosses" variables que des
langages plus anciens (cobol avec nous), c'est risqué de se retrouver
avec une variable qui peut peser des centaines de Mo voire des Go...


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
CrazyCat
2007-10-22 12:47:18 UTC
Permalink
Post by VooDoo
Crazy tu peux m'eclairer???
Traité en privé (on ne va pas faire trop de bruit), je ferais parvenir
ici le problème et sa solution.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
Réseau IRC Francophone: http://www.crazy-irc.net
VooDoo
2007-10-22 12:47:18 UTC
Permalink
c'est bon c'est résolu...
merci pour votre aide!
Post by VooDoo
Merci pour vos réponses.
J'ai essayé d'appliquer celle de crazycat, je ne me sens pas assez bon pour
pouvoir appliquer les autres....
Apparement meme celle de Crazy j'ai du mal...
mon tableau reste toujours NULL...
et je vois pas ce qui cloche!!
Crazy tu peux m'eclairer???
Mihamina Rakotomandimby
2007-10-16 14:39:50 UTC
Permalink
Post by VooDoo
Bonjour,
Bonjour,
Post by VooDoo
j'ai fait un p'tit script php pour de la gestion documentaire et j'aurai
besoin d'un p'tit coup de main.
id, de la categorie
pid, id de la categorie parente
title, titre
desc, description
Il n'est pas parfait, mais:
http://infogerance.us/Members/infogerance/tutoriels/php-navigation-tree
Continuer la lecture sur narkive:
Loading...