Stocker un nombre de sous niveaux variables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Stocker un nombre de sous niveaux variables

par Invité » 13 août 2005, 11:28

rayon_niveau n'est pas nécessaire, il suffit de chercher si il a un père ou nom :wink:
Je pense que si malhaureusement et je m'explique...

J'ai actuellement cette fonction récursive qui me determine le chemin jusqu'à un objet :

Code : Tout sélectionner

// Le chemin $id_niveau = $res['id_niveau']; $chemin = array(); $c = 0; $sql_chem = "SELECT niveaux_lg.niveau, niveaux.id_niveau, niveaux.niveau_parent FROM niveaux INNER JOIN niveaux_lg ON (niveaux.id_niveau = niveaux_lg.id_niveau) WHERE niveaux.id_rayon = '$id_rayon' AND niveaux_lg.id_lg = '$id_lg'"; $req_chem = mysql_query($sql_chem); // En récupérant la requête je créé un tableau while ($res_chem = mysql_fetch_array($req_chem)) { $chemins[$c]['nom'] = $res_chem['niveau']; $chemins[$c]['id'] = $res_chem['id_niveau']; $chemins[$c]['parent'] = $res_chem['niveau_parent']; $c++; } // Ma fonction récursive function look ($id, $chemins) { $i = 0; global $chemin; $chemin = array(); for ($c=sizeof($chemins)-1; $c >= 0; $c--) { // echo 'Je regarde le niveau '.$chemins[$c]['nom']; if ($chemins[$c]['id'] == $id) { // echo ' : c\'est celui que je cherche !!<br>'; $chemin[$i]['id'] = $chemins[$c]['id']; $chemin[$i]['nom'] = $chemins[$c]['nom']; $id = $chemins[$c]['parent']; $i++; } else { // echo '<br>'; } } if ($id == 0) { // echo 'Fin de la recherche'; return $chemin; } else { look ($id, $chemins); } } echo '<A HREF="rayon_'.$id_rayon.'_0.html">Rayon '.$res['rayon_lg'].'</A> <img src="img_interface/chevron.gif" width="13" height="7" /> '; for ($f = sizeof(look ($id_niveau, $chemins))-1; $f >= 0; $f--) { echo '<A HREF="rayon_'.$id_rayon.'_'.$chemin[$f]['id'].'.html">'.$chemin[$f]['nom'].'</A>'; if ($f != 0) { echo ' <img src="img_interface/chevron.gif" width="13" height="7" /> '; } }
Donc pour ceux qui ont la flemme de décortiquer la fonction, je créé un tableau qui contient tous les chemins possibles, puis je parcoure le nombre de fois nécessaire ce tableau pour determiner le chemin de mon article. J'ai donc un tableau qui contient n entrées sachant que 0 est le niveau dans lequel se situe mon objet et 1 le niveau sup, etc... Je n'ai plus qu'à inverser mon tableau et voilà mon chemin...

Attention : $chemins contient tous les chemins possibles et $chemin LE bon chemin. Les deux sont des tableaux, bien sûr.

Je suis assez content de ma fonction je pense qu'elle est optimisée (relativement) mais le problème c'est que je voudrais par exemple determiner pour tel niveau tous les objets contenus dans les niveaux inférieurs. Dans mon exemple, si j'accède au niveau Pop, je veux tous les CD dont le niveau est Pop mais aussi BritPop...

Vous voyez mon problème ? :p

Quelqu'un peut m'aider ?

Merci !

par smarties » 12 août 2005, 18:32

La structure :
Table RAYONS
- rayon_id : numéro identifiant auto-incrémenté
- rayon_nom : libellé
- rayon_niveau : niveau du sous-rayon
- rayon_père : rayon_id du rayon père
Les données :
1  CD        1     NULL
2  Rock      2     1
3  Metal     2     1
4  Pop       2     1
5  Brit-Pop  3     4
6 ...
rayon_niveau n'est pas nécessaire, il suffit de chercher si il a un père ou nom :wink:

par pascaltje » 12 août 2005, 17:08

le + top est d'utiliser une représentation arborescente par intervalles :-"

http://sqlpro.developpez.com/cours/arborescence/

A+

Pascal

par mere-teresa » 12 août 2005, 16:42

il faut parcourir plusieurs fois le tableau
Là, tu as pointé le doigt dessus ! Il te faut une fonction qui parcoure un tableau de façon récursive...qui va au plus profond du tableau = voir PHPDebutant

par Invité » 12 août 2005, 16:37

Hello !!

Je reviens vers vous (en ce moment décisif, comme dirait un vieux pote...) car j'essaie en vain avec ce système de retracer le chemin pour parvenir à un objet.

Je n'arrive pas à conceptualiser la manière de faire pour réussir, en ayant un rayon_id qui est stocké dans la table des articles, à retracer le chemin...

J'ai essayé plusieurs solutions, faire une requête pour commencer par le dernier niveau puis tant que le rayon_père n'est pas null en faire une autre, etc... Mais ça ne marche pas...

J'ai essayé de rapatrier tous mes rayons et de faire un foreach (tant bien que mal) mais vu qu'il faut parcourir plusieurs fois le tableau j'ai pas réussi...

Bref, je patauge et si quelqu'un pouvait ml'aider, je lui en serai infiniment reconnaissant !!

Merci !

Baaah...

par IkariWarrior » 10 août 2005, 13:03

J'ai essayé pas mal de script pour accéder à mes objets avec cette technique puisqu'en fait c'est celle à laquelle j'avais pensé au départ, mais c'est dur dur de scripter ça...

En fait je vois pas trop comment...

Et je peux même aller plus loin, ça fait trois jours que j'essaie d'apprendre le foreach (qui je pense est indispensable ici...) mais IMPOSSIBLE DE COMPRENDRE :oops:

Vraiment le foreach j'y arrive pas.

par albat » 09 août 2005, 13:42

Alors ?... :?:

par albat » 06 août 2005, 17:52

La structure :
Table RAYONS
- rayon_id : numéro identifiant auto-incrémenté
- rayon_nom : libellé
- rayon_niveau : niveau du sous-rayon
- rayon_père : rayon_id du rayon père
Les données :
1  CD        1     NULL
2  Rock      2     1
3  Metal     2     1
4  Pop       2     1
5  Brit-Pop  3     4
6 ...

Stocker un nombre de sous niveaux variables

par IkariWarrior » 06 août 2005, 17:33

Bonjour tout le monde !!

Alors attention problème ardu...

Je suis en train de créer un site marchand, et chaque objet est repertorié dans un rayon. Jusque là rien de compliqué. Le problème est que chaque rayon possède un nombre indeterminé de sous rayons. Par exemple, j'ai cette structure :

Code : Tout sélectionner

CD + Rock +- Metal +- Pop _+- Brit Pop _+- Variété française +- Rock and roll + Rap + Techno _+- House _+- Garage
Il faut pouvoir ajouter et retirer facilement une sous-catégorie...

Conceptuellement, je ne vois pas du tout comment faire et je suis bien embêté... J'ai pensé stocker un chemin sous forme de tableau dans un champs de ma BDD, mais je viens de lire sur ce site que faire ça signifie qu'il y a une erreur de conception de la BDD...

Quelqu'un peut m'aider je suis un peu perdu là :(

Merci !!