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 :

requete sql qui ne donne pas le bon array [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut requete sql qui ne donne pas le bon array
    Hello,

    J'ai trouvé un script qui fait une arborescence d'après un tableau qui est dans le code. Le tableau ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $data[] = array(1,0,'BOISSONS');
    $data[] = array(2,0,'ALIMENTS');
    $data[] = array(3,1,'Alcool');
    $data[] = array(4,1,'Sans alcool');
    $data[] = array(5,2,'Legumes');
    $data[] = array(6,5,'salades')
    ce qui donne array(id,id_parent,sujet)

    J'aimerais remplacer ce tableau static par les résultats de ma base mysql. J'ai donc essayé de faire comme ça :

    $connect = "SELECT id, id_parent, sujet FROM message";
    $resultat = mysql_query($connect) or die('error : '.mysql_error());
    $data= mysql_fetch_array($resultat);
    Mais cela ne fonctionne pas. Comment puis-je faire ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Salut,
    ca dépend évidemment du code mais si c'est un code récursif qui lie les cat aux sous-cat essaie d'ajouter ORDER BY id dans ta requête.
    Bye

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Hello,

    J'ai essayé d'ajouter ORDER BY id mais cela ne change rien.
    Effectivement c'est du récursif.
    Voici l'intégralité du code.

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
    /*cette fonction gère le décallage des éléments
    suivant leur position dans l'arborescence
    */
    function espace($rang)
        {
        $ch= '';
    for ($x=0;$x<$rang;$x++)
            {
            $ch.= '&nbsp;&nbsp;&nbsp;&nbsp;';
            }
        return $ch;
        }
     
    /*
    fonction récursive d'affichage de l'arbre
    $tab :tableau des éléments
    $pere :index de l'élément courrant
    $rang :décallage de l'élément
    */
    function recur($tab,$pere,$rang)
         {
    //ballayage du tableau
    for ($x=0;$x<count($tab);$x++)
            {
            //si un élément a pour père : $pere
            if ($tab[$x][1]==$pere)
                {
                 //on l'affiche avec le décallage courrant
                 echo espace($rang),$tab[$x][2],'<BR />',"\n";
     
                 /*et on recherche ses fils
                 en rappelant la fonction recur()
                 (+ incrémentation du décallage)*/
                 recur($tab,$tab[$x][0],$rang+1);
                }
            }
        }
    /*-------------------- MAIN -----------------------
    tableau des éléments de l'arbre:
    c'est un tableau à 2 dimensions.
    Une ligne représente un élément : data[$x]
    chaque ligne est décomposée en 3 données:
    - l'index de l'élément
    - l'index de l'élément parent
    - la chaîne à afficher
    ie: data[]= array (index, index parent, chaine )
    */
        //il faut d'abord déclarer un élément racine de l'arbre
        $data[] = array(0,-1,'racine');
     
        //puis tous les éléments enfants
    $connect = "SELECT id, id_parent, sujet FROM message ORDER BY id";
    $resultat = mysql_query($connect) or die('error : '.mysql_error());
    $data= mysql_fetch_array($resultat);
     
        //appelle de la fonction récursive (amorce)
        //avec recherche depuis la racine.
        recur($data,0,0);
     
     
    ?>

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    C'est peut-être un problème lié aux doubles entrées créées par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data= mysql_fetch_array($resultat);
    essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data= mysql_fetch_assoc($resultat);
    d'autre part tu écrases $data en faisant cela, donc la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data[] = array(0,-1,'racine');
    ne sert à rien.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Mince, j'ai essayé avec assoc mais ca ne fonctionne pas.

    Enfait voici le script original :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?php
    function espace($rang)
        {
        $ch= '';
    for ($x=0;$x<$rang;$x++)
            {
            $ch.= '&nbsp;&nbsp;&nbsp;&nbsp;';
            }
        return $ch;
        }
    function recur($tab,$pere,$rang)
         {
    for ($x=0;$x<count($tab);$x++)
            {
            if ($tab[$x][1]==$pere)
                {
                 echo espace($rang),$tab[$x][2],'<BR />',"\n";
                 recur($tab,$tab[$x][0],$rang+1);
                }
            }
        }
        $data[] = array(0,-1,'racine');
        $data[] = array(1,0,'BOISSONS');
        $data[] = array(2,0,'ALIMENTS');
        $data[] = array(3,1,'Alcool');
        $data[] = array(4,1,'Sans alcool');
        $data[] = array(5,2,'Legumes');
        $data[] = array(6,5,'salades');
        $data[] = array(7,6,'batavia');
        $data[] = array(8,6,'laitue');
        $data[] = array(9,5,'carottes');
        $data[] = array(10,5,'tomates');
        $data[] = array(11,2,'viandes');
        $data[] = array(12,11,'Jambon');
        $data[] = array(13,11,'steack haché');
        $data[] = array(14,0,'DIVERS');
        $data[] = array(15,14,'Dentifrice');
        $data[] = array(16,14,'sacs poubelles');
        $data[] = array(17,14,'lessive');
        $data[] = array(18,3,'biere');
        $data[] = array(19,3,'porto');
        $data[] = array(20,4,'eau');
        recur($data,0,0);
    ?>
    Il crée une arborescence avec le tableau ci dessus. Moi j'ai la même chose dans une base de données, car les données changent. Mais je n'arrive pas à remplacer ce tableau par les données de ma base.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $connect = "SELECT id, id_parent, sujet FROM message ORDER BY id ";
    $resultat = mysql_query($connect) or die('error : '.mysql_error());
    $data= mysql_fetch_array($resultat);

  6. #6
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    En fait il faut tu remplisses ton tableau complètement :

    mysql_fetch_array() ne retourne qu'une ligne de résultat, ca donnerait un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $data[] = array(0,-1,'racine');
    // Pour remplir le tableau avec toutes les lignes
    while($data[] = mysql_fetch_assoc($resulta)) {
    ;
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Alors en essayant ca, ca me donne une boucle infinie, comme toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $data[] = array(0,-1,'racine'); // Pour remplir le tableau avec toutes les lignes 
    $connect = "SELECT id, id_parent, sujet FROM message ORDER BY id ";
    $resultat = mysql_query($connect) or die('error : '.mysql_error());
    while($data[] = mysql_fetch_assoc($resultat)) { 
    ; 
    }

  8. #8
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    petit erreur ^^
    ceci devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while($row = mysql_fetch_row($resultat)) {
     	$data[] = $row; 
     }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2006
    Messages : 28
    Par défaut
    Ahhh merci bcp, tout fonctionne à merveille.

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

Discussions similaires

  1. [Excel 2007-2010]Requête SQL qui ne donne pas le bon résultat
    Par Davidw dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/10/2012, 11h48
  2. requete SQL qui ne donne pas le bon résultat?
    Par siho90 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/01/2011, 18h01
  3. [Access] requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2007, 12h33
  4. requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/03/2007, 09h37
  5. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18

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