Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2006, 17h00   #1
Invité de passage
 
Inscription : décembre 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 6
Points : 2
Points : 2
Envoyer un message via MSN à oddmec
Par défaut php / mysql établir une liste

Bonjour,
Je posséde une base de donnée dont l'une des tables contient les éléments à afficher dans une liste. Ces élements peuvent être des catégories ou des sous-catégories. Pour cela, j'ai créé un champ "parent_id" qui détermine la catègorie parent. Ainsi j'obtient :

Code :
1
2
3
4
5
6
7
8
 
id | parent_id | nom
1         0        catégorie1
2         0        catégorie2
3         1        sous-catégorie1.1
4         1        sous-catégorie1.2
5         2        sous-catégorie2.1
6         3        sous-sous-catégorie1.1.1
A partir de là je voudrais construire une liste (en html <ul><li>) de la façon suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<ul>
  <li>catégorie1</li>
     <ul>
       <li>sous-catégorie1.1</li>
         <ul>
           <li>sous-sous-catégorie1.1.1</li>
         </ul>
       <li>sous-catégorie1.2</li>
     </ul>
  <li>catégorie2</li>
     <ul>
       <li>sous-catégorie2.1</li>
     </ul>
</ul>
Je cherche à écrire une fonction en php qui me génére cette liste automatiquement... Seulement pas moyen! Je bloque sur ce problème depuis 2 jours..
Vous auriez des pistes pour m'aider?
merci
oddmec est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 17h11   #2
Expert Confirmé
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 717
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : décembre 2003
Messages : 3 717
Points : 3 082
Points : 3 082
Essaie le code que j'ai posté ici : http://www.developpez.net/forums/sho...0&postcount=21

La seule différence dans ma structure, c'est que je définit une page "racine" ayant pour id 1 et comme id_parent 0, mais ça ne devrait pas poser de problèmes dans ton cas...
__________________
Globalement inoffensif
Merci de respecter les règles du forum.
Aucune question technique par MP !
_______________________________________________________________________
La rubrique Ruby / Rails recrute. Contactez moi !
_______________________________________________________________________
Cours Ruby et Ruby on Rails (RoR) - FAQ Ruby / Rails - Livres Ruby / Rails
Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
Tutoriaux HTML/CSS et PHP
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 17h19   #3
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Ecrit à la volée, donc pas testé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
 
Class Liste {
 
   var $items;
   var $nom;
   var $id;
   var $parent_id;
 
   FUNCTION Liste($id, $parent_id, $title) {
      $this->id        = $id;
      $this->parent_id = $parent_id;
      $this->nom       = $nom;
      $this->items = array();
   }
   FUNCTION ADD(&$item) {
      $this->items[] =& $item;
   }
   FUNCTION display() {
      echo '<li>'.$this->nom;
      IF (count($this->items)) {
         echo '<ul>';
         foreach($this->items AS $key => $nop) {
            $items[$key]->display();
         }
         echo '</ul>';
      }
      echo '</ul>';
   }
}
 
?>
Et tu peux charger par exemple de la facon suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
//ON recupère les données de la bd et ON construit les listes
$sql = 'SELECT * FROM ma_table';
$req = mysql_query($sql);
$listes = array();
while($data = mysql_fetch_assoc($req)) {
   $listes[$data['id']] =& new Liste($data['id'], $data['parent_id'], $data['nom']);
}
 
//ON fait le lien entre les différentes listes
$racines = array();
foreach($listes AS $id => $nop) {
   IF ($listes[$id]->parent_id == 0) {
      $racines[] =& $liste;
   } else {
      $listes[$listes[$id]->parent_id]->ADD($listes[$id]);
   }
}
 
//Affichage
IF (count($racines)) {
   echo '<ul>';
   foreach($racines AS $key => $nop) {
      $racines[$key]->display();
   }
   echo '</ul>';
}
Voilà une des nombreuses pistes à explorer. HTH
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2006, 20h44   #4
Invité de passage
 
Inscription : décembre 2005
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 6
Points : 2
Points : 2
Envoyer un message via MSN à oddmec
Merci beaucoup à tous les 2!!
J'ai retenu le code de titoumimi, çà marche très bien.

++
oddmec est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h02.


 
 
 
 
Partenaires

Hébergement Web