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 :

Problème avec while(mysql_fetch_assoc()) imbriqués


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Problème avec while(mysql_fetch_assoc()) imbriqués
    Bonjour à tous, je suis nouveau sur ce forum, mais j'ai déjà eu l'occasion de le visiter plusieurs fois, aujourd'hui je viens vers vous car j'ai un problème pour mon script.
    Alors voilà, je suis en train de développer un site (extranet) qui aura pour but principal de gérer les notes des étudiants. J'ai une base de données avec plusieurs tables pour gérer une arborescence. Je n'arrive pas à afficher l'arborescence comme je le voudrais.
    Pour ce qui est de mes tables voici l'organisation:

    formations
    nom | id
    semestres
    nom | id | idp
    ue
    nom | id | idp

    idp étant l'id précédent pour remonter dans l'arborescence.
    Le problème vient de mes boucles while, la première boucle fonctionne bien, mais la deuxième ne fonctionne que la première fois.
    J'arrive à faire fonctionner la deuxième boucle en refaisant la requête à chaque fois, mais je dois imbriquer 5 boucles, alors refaire à chaque fois les requêtes ça risque de surcharger le serveur.
    code fonctionnant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql1=mysql_query($req1) or die('Erreur SQL !');
    while($data1=mysql_fetch_assoc($sql1)){
    		if($data1['idp'] == $data['id']) echo "<tr><td><pre>\t$data1[nom]</pre></td></tr>";
    	}
    Voici mon 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
    <?php
    include('config.php');
     
    $req="SELECT * FROM `formations` ORDER BY `nom`";					
    $sql=mysql_query($req) or die('Erreur SQL !<br>'.$req.'<br>'.mysql_error());
    $req1="SELECT * FROM `semestres` ORDER BY `nom`";					
    $sql1=mysql_query($req1) or die('Erreur SQL !<br>'.$req1.'<br>'.mysql_error());
    $req2="SELECT * FROM `ue`";					
    $sql2=mysql_query($req2) or die('Erreur SQL !<br>'.$req2.'<br>'.mysql_error());
    $req3="SELECT * FROM `modules` ORDER BY `nom`";					
    $sql3=mysql_query($req3) or die('Erreur SQL !<br>'.$req3.'<br>'.mysql_error());
    $req4="SELECT * FROM `matieres` ORDER BY `nom`";					
    $sql4=mysql_query($req4) or die('Erreur SQL !<br>'.$req4.'<br>'.mysql_error());
     
     
    echo "<table>";
    while($data=mysql_fetch_assoc($sql)){
    	echo "<tr><td><pre>$data[nom]</pre></td></tr>";
    	while($data1=mysql_fetch_assoc($sql1)){
    		if($data1['idp'] == $data['id']) echo "<tr><td><pre>\t$data1[nom]</pre></td></tr>";
    	}
    }
    echo "</table>";
    mysql_close(); 
    ?>
    Merci d'avance,

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    je ne comprends pas pourquoi tu aurais besoin de la récursivité pour gérer les semestres.
    Qu'est ce donc la table ue ?
    Je pense que le design de ta base est bancal.
    Donne plus d'infos

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    La table ue est identique aux autres, la structure de toutes mes tables sont identiques sauf formation qui n'a pas de colonne idp vu qu'elle est en haut de l'arborescence.
    Chaque Formation est constituée de plusieurs Semestres qui sont constitués de plusieurs UE et ainsi de suite.
    J'ai donc bel et bien besoin de la récursivité.

    Merci pour votre réponse, n’hésitez pas à me demander plus d'informations si besoin.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Oulà !
    Tu confonds présentation des données en arborescence et gestion sous-jacente de ces données par une base de données relationnelle.
    La présentation n'a rien à voir avec la manière dont les données sont gérées, c'est deux mondes complètements différents.

    Avant de continuer, tu devrais potasser un peu sinon tu vas jeter l'éponge assez rapidement : ici

    Sache que la récursivité d'une table est rare. Pour que cela soit exploitable facilement, il faut que les éléments parents et enfants soient de même nature.
    Par exemple : une arborescence de menus.
    Chaque niveau est un menu qui peut contenir 0 à une infinité de sous-menus.

    Dans ton cas, voici ce que tu souhaiterais gérer de manières récursive :
    Formation
        |-Semestres
            |-UE
    La nature de tous ces éléments est totalement différente, il est très fortement déconseillé de faire appel à un système récursif.

    Tu devrais t'orienter vers plusieurs tables relationnelles :
    - t_formation(#id, nom)
    - t_ue(id, nom)
    
    - t_annee_scolaire(#id, annee, semestre, id_formation)
    - t_programme(#id, nb_heures, id_annee_scolaire, id_ue)
    Enfin c'est une idée jetée comme ça mais dans tous les cas tu n'as pas besoin de la récursivité pour gérer ta problématique.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Ah, ça me paraissait plutôt pas mal, mes requêtes sont assez longues, mais j'arrive à remonter toute l'arborescence en une requête.
    Je verrai ça plus tard.
    Sinon, une idée pour le problème des while($data=mysql_fetch_assoc($sql)) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while($data=mysql_fetch_assoc($sql)){
    	echo "<tr><td><pre>$data[nom]</pre></td></tr>";
    	while($data1=mysql_fetch_assoc($sql1)){
    		if($data1['idp'] == $data['id']) echo "<tr><td><pre>\t$data1[nom]</pre></td></tr>";
    	}
    }
    la méthode mysql_fetch_assoc décale à chaque fois l'index, met il ne repart au début une fois finit, comment le faire repartir du début à chaque fois ?

Discussions similaires

  1. Problème avec des #include imbriqués
    Par Ph.denis dans le forum C++
    Réponses: 6
    Dernier message: 16/03/2008, 10h15
  2. [MySQL] problème avec while
    Par scastong dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 28/02/2008, 20h42
  3. [MySQL] problème avec while
    Par dudu134 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 13/11/2007, 08h51
  4. [MySQL] Problème avec while
    Par Whinze dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2007, 17h33
  5. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 10h30

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