IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Affichage arborescence hierarchique


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut Affichage arborescence hierarchique
    Bonjour à tous,

    je me heurte à problème depuis quelques temps:

    j'ai un table (mysql) telle que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id |  name | parent
    -------------------------
    1  | row_a | 0
    2  | row_b | 0
    3  | row_c | 1
    4  | row_d | 3
    5  | row_e | 2
    et j'aurais souhaité traiter ces données afin de les afficher de la sorte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <ol class="decimal"><li style="">row_a
      <ol class="decimal"><li style="">row_c
        <ol class="decimal"><li style="">row_e</li></ol></li></ol></li><li style="">row_b
      <ol class="decimal"><li style="">row_d</li></ol></li></ol>
    Je vous passe le détail de mes différentes (vaines) tentatives.

    En fait, le principal problème étant que souhaite une profondeur maximale de menu "illimité".

    Si certains d'entre vous ont quelques pistes, voir carrément la solution, je suis preneur!

    Merci d'avance.

    A bientôt!

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    avec des <ol> et <li> ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    oui lol,
    excuse moi, je me suis surement mal exprimé mais mon problème ne concernant pas vraiment les balises html (liste numérotées ou pas).

    Mon soucis concerne le formattage des données en PHP (ou bien carrément la requête mysql).

    Tu vois ce que je veux dire ?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par Dnartreb360 Voir le message
    oui lol,
    excuse moi, je me suis surement mal exprimé mais mon problème ne concernant pas vraiment les balises html (liste numérotées ou pas).

    Mon soucis concerne le formattage des données en PHP (ou bien carrément la requête mysql).

    Tu vois ce que je veux dire ?
    ca va deprendre de ca, parce que faire des espaces et mettre les chiffres, c'est plus facile que de fermer les balises au bon endroits

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Par défaut
    j'ai laissé volontairement ce sujet tranquille pendant une semaine afin de voir si des retours arrivaient...

    Étant donné qu'il n'y en a pas (hormis stealth35) je vais vous fournir d'avantage de détails, quitte à mettre en lumière mes éventuelles erreurs:

    Comme indiqué dans mon premier message, ma base de données est structurée selon le "Adjacency List Model" (je ne connais pas terme francophone)
    plus d'infos ici: http://dev.mysql.com/tech-resources/...ical-data.html

    Ainsi, comme indiqué dans le lien ci dessus, j'effectue ma requête à grand coup de "left join".

    J'obtiens un tableau PHP en retour que je souhaite "transformer" en un liste HTML "hierarchique"

    Voici d'avantages d'informations pour ceux qui seraient tenté de faire le test:

    Constitution de la table "hierarchical_table":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    CREATE TABLE `hierarchical_table` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(127) NOT NULL,
      `parent` int(11) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
     
    -- 
    -- Contenu de la table `hierarchical_table`
    -- 
     
    INSERT INTO `hierarchical_table` (`id`, `name`, `parent`) VALUES 
    (1, 'row_a', 0),
    (2, 'row_b', 0),
    (3, 'row_c', 1),
    (4, 'row_d', 3),
    (5, 'row_e', 2);
    Construction de la requête: (j'ai abandonné l'idée d'un nombre infini de degrés d'arborescence)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $degree = $params->arbo->degree;
    $alpha 	= array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    $table 	= 'hierachical_table';
     
    for($i=0;$i<$degree;$i++){
    	$select[] = $alpha[$i].".id as catid_".$alpha[$i].",".$alpha[$i].".name as catname_".$alpha[$i];
    }
    for($i=0;$i<$degree-1;$i++){
    	$join[] = "LEFT JOIN ".$table." as ".$alpha[$i+1]." ON ".$alpha[$i+1].".parent=".$alpha[$i].".id";
    }
    $select = "SELECT ".implode(',',$select)." ";
    $from 	= "FROM ".$table." as a ";
    $join 	= implode(' ',$join)." ";
    $where  = "WHERE a.parent=0 ";
    $sql 	= $select.$from.$join.$where;
    Détail de la requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT a.id as catid_a,a.name as catname_a,b.id as catid_b,b.name as catname_b,c.id as catid_c,c.name as catname_c,d.id as catid_d,d.name as catname_d 
    FROM hierarchical_table as a 
    LEFT JOIN hierarchical_table as b ON b.parent=a.id 
    LEFT JOIN hierarchical_table as c ON c.parent=b.id 
    LEFT JOIN hierarchical_table as d ON d.parent=c.id 
    WHERE a.parent=0
    Tableau PHP retourné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Array
    (
        [0] => Array
            (
                [catid_a] => 1
                [catname_a] => row_a
                [catid_b] => 3
                [catname_b] => row_c
                [catid_c] => 4
                [catname_c] => row_d
                [catid_d] => 
                [catname_d] => 
            )
     
        [1] => Array
            (
                [catid_a] => 2
                [catname_a] => row_b
                [catid_b] => 5
                [catname_b] => row_e
                [catid_c] => 
                [catname_c] => 
                [catid_d] => 
                [catname_d] => 
            )
     
    )
    Enfin, voici le code HTML souhaité en retour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <ul>
    	<li>row_a</li>
    	<ul>
    		<li>row_c</li>
    		<ul>
    			<li>row_d</li>
    		</ul>
    	</ul>
    	<li>row_b</li>
    	<ul>
    		<li>row_e</li>
    	</ul>
    </ul>
    S'il vous plait, un courageux (ou un courageuse) pour me filer un coup de main ?

  6. #6
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    je veux bien donner un coup de main mais faut tendre la joue. Je veux dire faut poser une question.

    ça marche pas ton code?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage arborescence
    Par lina22 dans le forum Langage
    Réponses: 14
    Dernier message: 21/08/2009, 11h21
  2. Affichage arborescence sous dos
    Par samuel539 dans le forum Windows
    Réponses: 6
    Dernier message: 26/02/2009, 10h13
  3. Affichage arborescence avec deux table
    Par hichamy dans le forum SQL
    Réponses: 8
    Dernier message: 09/01/2008, 21h00
  4. [MySQL] Fonction récursive pour affichage arborescence
    Par Mister Paul dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 01/12/2007, 19h30
  5. [TOMCAT] affichage arborescence au lieu d'éxécuter la servle
    Par lombra dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/08/2003, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo