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

Langage PHP Discussion :

Affichage du résultat d'une requête SQL dans un tableau indenté [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 63
    Points : 42
    Points
    42
    Par défaut Affichage du résultat d'une requête SQL dans un tableau indenté
    Bonjour,
    Je veux afficher sous forme d'un tableau indenté des informations extraites d'une base de données MySql.
    table 1 : declarations(id,date,declaration)
    table 2: replonses(id,,id_declaration,reponse)

    Plusieurs réponses peuvent être faites pour une déclaration.
    La présentation que je souhaite est la suivante:
    _____________________________________
    | n°declaration | date | Declaration | Reponse |
    ----------------------------------------------------------------
    |1 |01/01/2009| declaration 1|
    -------------------------------------------| reponse 1-1|
    -------------------------------------------| reponse 1-2|
    |2 |12/02/2009| declaration 2|
    -------------------------------------------| reponse 2-1|
    -------------------------------------------| reponse 2-2|
    -------------------------------------------| reponse 2-3 |
    Ce que j'ai fait pour le moment;
    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
    <?php
    	$sql = "SELECT  d.declaration_date, d.observe, r.reponse\n"
    	. "FROM reponses r, declarations d j\n"
    	 ."WHERE r.id_declaration=d.id  ";
     
    	$query=mysql_query($sql) or die ('Requete de recherche impossible: '.mysql_error());
    ?>
    	<table id="presentation_recherche">
    		<tr><th>Date</th><th>Déclaration</th><th>Réponse</th></tr><tr>
    		<?php
    			while ($val_1=mysql_fetch_array($query))
    			{
    				echo('<td>'.$val_1[0].'</td><td>'.$val_1[1].'</td></tr>');
    				while ($val=mysql_fetch_array($query))
    					{
    						echo('<tr><td></td><td</td><td>'.$val[2].'</td></tr>');
    					}
    			}
     
    		?>
    	</table>
    Bien sur cela ne donne pas le résultat que j'attends sinon je n'écrirais pas ce message.
    Une idée ?
    Merci

  2. #2
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Slt,

    A première vue le <tr> qui est suit réponse devrait plutôt se retrouver au début du premier echo à l'intérieur du while (pour bien créer une ligne par déclaration).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <tr><th>Date</th><th>Déclaration</th><th>Réponse</th></tr>
    		<?php
    			while ($val_1=mysql_fetch_array($query))
    			{
    				echo('<tr><td>'.$val_1[0].'</td><td>'.$val_1[1].'</td></tr>');
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    Effectivement le code est plus propre de cette manière.
    Mais j'obtiens toujours la même chose (non précisé dans mon premier post): seule la réponse concernant la première déclaration est retournée avec toutes ces réponses. Les déclarations suivantes sont ignorées...
    Est ce la bonne méthode pour faire un tel tableau ?

  4. #4
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Ah j'avais pas vu le mysql_fetch_array qui est fait sur la même ressource...

    Il faut revoir l'algo pour avoir un truc du genre :

    Trier la requête par id croissant ou décroissant

    Afficher les données de la première déclaration puis de la première réponse (= premier résultat de la requête)

    Tant que le résultat de la requête retourné par mysql_fetch_array porte sur la même déclaration => afficher la réponse

    Sinon si on a changé de déclaration recommencer.

    Et ce jusqu'au dernier enregistrement renvoyé par la requête de départ.

    (j'ai du mal à présenter proprement l'algo dsl)
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 63
    Points : 42
    Points
    42
    Par défaut
    C'est exactement mon idée.
    Je pensais que l'imbrication des while me permetrait d'y arriver.
    Je cherche....

  6. #6
    Membre expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Points : 3 115
    Points
    3 115
    Par défaut
    Citation Envoyé par ratatam25 Voir le message
    C'est exactement mon idée.
    Je pensais que l'imbrication des while me permetrait d'y arriver.
    Je cherche....
    Oui, mais il faut juste faire un while sur le fetch et travailler dedans.

    Dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ID_DECLA <= -1
    while ($val_1=mysql_fetch_array($query))
    {
         SI id déclaration courante <> ID_DECLA
              ALORS afficher juste la réponse (ligne avec blanc blanc blanc réponse)
         SINON SI id déclaration courante = ID_DECLA
              ALORS afficher la déclaration (ligne avec id date décla blanc) et la première réponse (autre ligne avec blanc blanc blanc réponse)
         FIN SI
         ID_DECLA <= id déclaration courante
    }
    Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

    Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/11/2014, 12h13
  2. Affichage du résultat d'une requête sql dans un label
    Par etincelle01 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/04/2010, 17h02
  3. Réponses: 15
    Dernier message: 11/05/2007, 15h28
  4. [SQL-VBA] récupérer le résultat d'une requète SQL dans un fichier txt
    Par djidanestribbal dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/02/2007, 15h25
  5. récupérer le résultat d'une requête sql dans un edit
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2005, 14h07

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