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 :

Afficher le résultat d'une requête SQL dans un tableau


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Afficher le résultat d'une requête SQL dans un tableau
    Bonjour a tous,

    J'ai beau chercher je n'arrive pas a trouver la requete.

    Je veux sortir toutes les valeurs d'un champs dans un tableau avec $ROW.

    Savez vous quelle est la ligne de code pour le faire de facon horizontal dans un tableau ?

    Merci

  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
    Salut,

    c'est du charabia
    et sans plus de précision (code, présence de données d'exemple, résultat escompté)... pas d'aide.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    J'ai rien compris non plus, mais vu qu'il est question de requête et d'affichage dans un tableau, peut-être que ce tuto peut t'aider : Affichage de données dans un tableau HTML
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Dans les details, 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
    26
    27
    28
    29
    30
    31
    <?php  
     
    $db = mysql_connect('localhost', 'root', 'root')  or die('Erreur de connexion '.mysql_error());
    mysql_select_db('ca_db',$db)  or die('Erreur de selection '.mysql_error());
     
     
    $sql3 = " SELECT Marque,Montant_CA,Year_CA FROM ca_web  WHERE Customers='51489446' ORDER BY Marque ASC "; 
    $combo3 = mysql_query($sql3) or die("Requete pas comprise");
    $combo2 = mysql_query($sql3) or die("Requete pas comprise");
     
    echo '<table border="1"><thead><tr>';
     
    	while ($row3 = mysql_fetch_array($combo3)) 
     
    		{
    			echo '<th > ' . $row3[0] . '</th>' ;
    		}
     
    echo '</tr>';
    echo '<tr>';
     
     
    	while ($row3 = mysql_fetch_array($combo2)) 
     
    		{
    			echo '<td >' . $row3[1] . '</td>' ;
    		}
     
    echo '</tr></thead><tbody>';
     
    ?>

    J'obtien ce résultat.

    M1 M1 M1 M2 M2 M2 M3 M3 M3 M4 M4 M4
    30.0000 0.0000 0.0000 0.0000 0.0000 144.0000 900.5000 0.0000 0.0000 0.0000 144.0000 900.5000


    Moi j'essaye d'obtenir ca

    M1 M2 M3 M4
    2014 30.0000 0.0000 144.0000 0.0000
    2013 0.0000 144.0000 0.0000 0.0000
    2012 0.0000 0.0000 900.5000 0.0000


    Auriez-vous une idée ?

    Merci

  5. #5
    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
    Salut,

    ce que tu cherches à faire correspond à un tableau croisé dynamique et c'est autrement plus ardu qu'un banal affichage d'un tableau sur SELECT.
    D'autant plus que MySql est très pauvre de ce côté...

    Voici une soluce mais ça sort du four, je n'ai absolument rien testé :

    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
    64
    65
    66
    67
    68
    69
    $cnx = mysql_connect('localhost', 'root', 'root')  or die ('Erreur de connexion '.mysql_error());
    mysql_select_db('ca_db', $cnx)  or die ('Erreur de selection '.mysql_error());
     
     
    $sql  = <<<'sql'
      SELECT Marque, Year_CA, COALESCE(SUM(Montant_CA), 0) AS total_ca
        FROM ca_web
       WHERE Customers = '51489446'
    GROUP BY Marque ASC, Year_CA DESC
    sql;
     
    $qry        = mysql_query($sql) or die ('Requete pas comprise');
    $brands     = array();
    $years      = array();
    $table      = array();
    $idx_brands = 0;
    $idx_years  = 0;
     
    while ($row = mysql_fetch_assoc($qry))
    {
        if ( ! isset($brands[$row['Marque']]))
        {
            $brands[$row['Marque']] = ++$idx_brands;
        }
        $i = $brands[$row['Marque']];
     
        if ( ! isset($years[$row['Year_CA']]))
        {
            $years[$row['Year_CA']] = ++$idx_years;
        }
        $j = $years[$row['Year_CA']];
     
        $table[$i][$j] = $row['total_ca'];
    }
     
    ksort($brands);
    krsort($years);
     
    echo <<<'html'
    <table border="1">
        <thead>
            <tr>
    html;
     
    foreach ($brands as $brand => $idx)
    {
        echo '<th>', htmlspecialchars($brand), '</th>';
    }
     
    echo <<<'html'
            </tr>
        </thead>
        <tbody>
    html;
     
    foreach ($years as $year => $j)
    {
        echo '<tr>';
        foreach ($brands as $brand => $i)
        {
            echo '<td>', ((isset($table[$i][$j])) ? $table[$i][$j] : 0), '</td>';
        }
        echo '</tr>';
    }
     
    echo <<<'html'
        </tbody>
    </table>
    html;

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Effectivement j'étais sur le mauvais chemin.

    Un tres grand merci a vous pour le code, du coup vous me l'avez entièrement écrit.

    Il fonctionne parfaitement, j'ai fait deux trois petites modif car j'avais une erreur
    Parse error: syntax error, unexpected T_SL.
    Cela venait des cotes sur les HTML.

    J'aimerais ne pas abuser de votre gentillesse mais comment est-il possible de l'avoir sous cette forme le tableau.


    Nom : Capture.PNG
Affichages : 10337
Taille : 8,0 Ko


    Un tres grand merci

  7. #7
    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
    Quelque chose comme ça :
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    $cnx = mysql_connect('localhost', 'root', 'root') or die ('Erreur de connexion '.mysql_error());
    mysql_select_db('ca_db', $cnx) or die ('Erreur de selection '.mysql_error());
     
     
    $sql  = <<<'sql'
      SELECT Marque, Year_CA, COALESCE(SUM(Montant_CA), 0) AS total_ca
        FROM ca_web
       WHERE Customers = '51489446'
    GROUP BY Marque ASC, Year_CA DESC
    sql;
     
    $qry        = mysql_query($sql) or die ('Requete pas comprise');
    $brands     = array();
    $years      = array();
    $table      = array();
    $idx_brands = 0;
    $idx_years  = 0;
     
    while ($row = mysql_fetch_assoc($qry))
    {
        if ( ! isset($brands[$row['Marque']]))
        {
            $brands[$row['Marque']] = ++$idx_brands;
        }
        $i = $brands[$row['Marque']];
     
        if ( ! isset($years[$row['Year_CA']]))
        {
            $years[$row['Year_CA']] = ++$idx_years;
        }
        $j = $years[$row['Year_CA']];
     
        $table[$i][$j] = $row['total_ca'];
    }
     
    ksort($brands);
    krsort($years);
     
    echo <<<'html'
    <table border="1">
        <thead>
            <tr>
                <th>Année</th>
    html;
     
    foreach ($brands as $brand => $idx)
    {
        echo '<th>', htmlspecialchars($brand), '</th>';
    }
     
    echo <<<'html'
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
    html;
     
    foreach ($years as $year => $j)
    {
        $total = 0;
     
        echo <<<html
            <tr>
                <td>{$year}</td>
    html;
     
        foreach ($brands as $brand => $i)
        {
            $ca     = (isset($table[$i][$j])) ? $table[$i][$j] : 0;
            $total += $ca; 
            echo '<td>', $ca, '</td>';
        }
     
        echo <<<html
                <td>{$total}</td>
            </tr>
    html;
    }
     
    echo <<<'html'
        </tbody>
    </table>
    html;

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Génial, effectivement je l'avais inclus dans la boucle forearch c'est pour cela que je n'arrivais pas a afficher correctement les données.

    Si j'ai bien compris l'ordre des années dans le tableau est géré par la requete SQL avec GROUP BY Year_CA DESC, Marque ASC c'est bien ca ?

  9. #9
    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
    en partie oui, par le php aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ksort($brands);    // pas nécessaire, je l'avoue
    krsort($years);    // obligatoire

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Ok merci beaucoup de toutes ces informations.

    Je ne connaissais pas KSORT.

    J'arrete de vous embeter je vais essayer de me debrouiller seul pour la suite

    Encore un enorme merci pour votre aide.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/08/2012, 23h13
  2. Afficher le résultat d'une requéte sql dans un textbox
    Par benhmou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/03/2012, 19h18
  3. Réponses: 2
    Dernier message: 07/02/2012, 09h17
  4. Réponses: 13
    Dernier message: 26/07/2007, 08h50

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