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 :

Tableau à dimensions dynamiques et arborescence [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut Tableau à dimensions dynamiques et arborescence
    Bonjour,
    Je cherche a faire un script qui encastre des tableaux les un dans les autres.... un truc du genre :
    $arraytree=array("Racine"=>array("Branche 1"=>array("Sous Branche1"=>"Feuille 1","Sous Branche 2"=>"Feuille 2"),"Branche2"=>"Feuille 3"));

    Ma Bd :
    Id_Feuille
    Id_Pere
    Nom
    Level

    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
     
    //Pour le moment je fais une file de "niveau" donc l'indice du tableau correspond au niveau.... J'aimerais augenter d'une dim plutot...
     
    function SearchChild($Id, $TabChild=array()){
     
           $Sql="SELECT * FROM arbre_cat WHERE IdPere=".$Id;
        $Result = mysql_query ($Sql) or die (mysql_error ());
        if($Result){
            $Count=mysql_num_rows($Result);
            if($Count>0){
                $TabData=array($Col['Arbre_Id'], $Col['Nom'], $Col['Descr'], $Col['CheminPhoto'], $Col['Level'], $Col['IdPere'], $Col['IdRef'], $Col['IdLevel']);
                $Id=$Col['IdPere'];
                $Liste[$Col['Level']]=$TabData;
                if($Id==NULL)
                    return($Liste);
                else   
                    SearchChild($Id,$Liste);
                }
    	}		
    }
    Suis-je claire????

    Merci,
    Guigo

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Hellow,

    Je pense que le plus simple dans ce cas est d'utiliser 3 boucles avec le mot clé GROUP BY.

    Chaque boucle réprésentera un niveau de la hiérarchie de l'array

    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
     
    $array = array();
    $sql = "SELECT racine FROM table GROUP BY racine";
    $q = mysql_query($sql);
    while ($r = mysql_fetch_assoc($q)) {
       $sql2 = "SELECT branche FROM table WHERE racine= '".$r['racine']."' GROUP BY branche";
       $q2 = mysql_query($sql2);
       while ($r2 = mysql_fetch_assoc($q2)) {
          $sql3 = "SELECT feuille FROM table WHERE racine= '".$r['racine']."' AND branche = '".$r2['branche']."'";
          $q3 = mysql_query($sql3);
          while ($r3 = mysql_fetch_assoc($q3)) {
              $array[$r['racine']][$r2['branche']][] = $r3;
          }
       }
    }
    PS : pour bien faire, il faudrait faire des mysql_num_rows() à chaque fois pour bien vérifier qu'on a au moins une ligne

  3. #3
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Ok merki,
    je test et reviens .... :-)

  4. #4
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    J'ai une impression !
    Je suis bloque si j'ai un arbre supperieur a 3 noeuds?

  5. #5
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Hmmm oui et non... si les arbres font maximum 4 noeuds, il suffit de boucler une fois de plus

    Par contre, c'est un code très très lourd... il faudrait peut-être revoir la structure de la base de données...

  6. #6
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Justement je suis en pleine restructuration....
    Il me semblais judicieux de construire une table de categorie. Chaque nouvelle ligne pointe vers un pere (ou null si racine). De cette facon ne suis pas limite par un nombre de categorie (cat, souscat, sssouscat, ....)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //structure table
    Arbre_Id
    Nom
    Descr
    CheminPhoto
    Level
    IdPere
    L'interet est donc d'avoir une strusture en arbre ou speudo arbre. Et d'avoir mon package de fonction qui va bien....
    La premiere fonction serait la construction de l'arbre complet.

    As tu des remarques, suggestions, aides pour la structure et tout le reste?

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

Discussions similaires

  1. Problème tableau 2 dimensions dynamique
    Par Beaudelicius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2011, 14h24
  2. Réponses: 0
    Dernier message: 18/03/2010, 15h27
  3. creation d'un tableau double dimension dynamiquement
    Par elmcherqui dans le forum C++
    Réponses: 3
    Dernier message: 09/07/2009, 20h05
  4. Réponses: 17
    Dernier message: 26/04/2007, 10h57
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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