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 :

Récupération de données dans le bon ordre [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut Récupération de données dans le bon ordre
    Bonjour,

    Je suis confronté a un problème depuis un petit moment maintenant et je n'arrive pas à le résoudre alors je viens à vous pour avoir un nouveau point de vue^^.
    Voici mon problème : je récupère dans ma table, des statistiques sur chaque personne ayant joué un certain nombre d'heure sur un jeux vidéo et je les affiche dans un tableau.
    Voila à quoi ressemble se que ma BDD me renvoi :
    Personne : Jeux : Nb Heure
    Arnaud : BF3 : 50
    Arnaud : COD : 125
    Arnaud : Rayman : 10
    George : BF3 : 74
    George : BorderLand : 84
    George : COD : 88
    etc...
    Et donc mon problème c'est que les données ne s'affiche pas au bon endroit parce que chaque personne n'a pas joué a tout les jeux et cela me fait des décalage dans mon code.
    Voici mon code :
    Code PHP : 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
    $lignejoueur = '';
    $lignejeux = '<tr><th>Nom Joueur</th>';
    $donneejoueur = '';
    $tabjeux = array();
    $j = 0;
     
    echo '<div align="center"><table border="1" align-text="left"><caption class="souligne">Statistique par Joueur et par Jeux Du ' . $datedebutafficher . ' Au ' . $datefinafficher . '</caption>';
    //Faire et récupérer les données des requêtes SQL
    //Mettre dans des variables et dans le tableau les données
     
    while ($data = mysqli_fetch_assoc($resultheure)) {
        if (in_array($data['Jeux'], $tabjeux)) {
     
        } else {
            $tabjeux[$i] = $data['Jeux'];
            $lignejeux.='<th>' . $tabjeux[$i] . '</th>';
            $i++;
        }
        if ($data['Joueur'] == $donneejoueur) {
            foreach ($tabjeux as $value) {
                if ($data['Jeux'] == $value) {
                    $lignejoueur .= '<td>' . $data['SommeHeure'] . '</td>';
                    break;
                } else {
     
                }
            }
        } else {
            $donneejoueur = $data['Joueur'];
            $lignejoueur .= '</tr><tr><th>' . $data['Joueur'] . '</th>';
            foreach ($tabservice as $value) {
                if ($data['Jeux'] == $value) {
                    $lignejoueur .= '<td>' . $data['SommeHeure'] . '</td>';
                    break;
                } else {
     
                }
     
            }
        }
    }
    echo $lignejeux . $lignejoueur;
    echo '</table>';
    Pourrais-je avoir un peu d'aide s'il vous plait ?
    Le tableau a comme en ligne les joueur et en colonne les Jeux et donc en données par ligne les heures de jeux.

    Merci d'avance,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    On peut dire que tu ne connais pas la règle du KISS.
    Je ne vois pas bien ou tu voulais aller en comparer tes données avec un tableau vide...

    Ta structure est mauvaise : Il faut une table "jeu", une table "joueur" et une table "jeu_joueur" contentant les heures.
    La jointure des trois te donneras toutes les combinaisons.

    on peut toujours faire avec ta table existante mais c'est moins sérieux
    [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
    while ($data = mysqli_fetch_assoc($resultheure)) {
       $result[$data['Joueur']][$data['Jeux'] = $data['SommeHeure'];
       $tblJeux[$data['Jeux']] = $data['Jeux'];
    }
     
    echo '<table>
                  <tr>
                     <th>Joueur</th>';
    foreach ($tblJeux as $jeu) {
               echo '<th>' . $jeu . '</th>';
         }
            echo '</tr>';
     
    foreach ($result as $joueur=>$values) {
         echo '<tr><td>' . $joueur . '</td>';
         foreach ($tblJeux as $jeu) {
               $heures = isset($values[$jeu]) ? $values[$jeu] : 0;
                echo '<td>' . $heures . '</td>';
         }
        echo '</tr>';
    }
    echo '</table>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut
    Merci de ta réponse sabotage,

    Non je ne connais pas la règle du KISS, qu'est ce que c'est ?
    Au départ j'avais fait 3 table aussi mais je me suis enméler les pinceaux avec . Je n'avais pas penser a imbriquer un foreach pour parcourir avec la deuxieme clé du coup je me suis retrouvé coincé pour mettre en relation les joueur et les jeux avec les nombres d'heures.
    Je ne suis pas très bon en PHP, je ne suis pas structuré du tout, je ne fais que des usines à gaz... Je pense qu'un cours de open classroom me fera du bien pour mieux structurer mes codes...
    Merci pour le code c'est parfaitement fonctionnel

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach foreach ($tblJeux as $jeu) {
    Oups ! Un petit hoquet d'après fêtes ?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut
    J'aurai une dernière question
    Je rajoute à la fin de chaque ligne et de chaque colonne un total donc pour le total de chaque ligne je fais $total+=heures et je le rajoute à la fin de chaque ligne en remettant $total=0 à chaque fois pour avoir le total de chaque ligne mais pour le total de chaque colonne je ne vois pas comment faire

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Non je ne connais pas la règle du KISS, qu'est ce que c'est ?
    C'est de toujours faire simple.

    Pour le total tu peux le faire 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
    while ($data = mysqli_fetch_assoc($resultheure)) {
       $result[$data['Joueur']][$data['Jeux'] = $data['SommeHeure'];
       @$tblJeux[$data['Jeux']] += $data['SommeHeure'];
    }
     
    echo '<table>
                  <tr>
                     <th>Joueur</th>';
    foreach ($tblJeux as $jeu) {
               echo '<th>' . $jeu . '</th>';
         }
            echo '</tr>';
     
    foreach ($result as $joueur=>$values) {
         echo '<tr><td>' . $joueur . '</td>';
         foreach ($tblJeux as $jeu=>total) {
               $heures = isset($values[$jeu]) ? $values[$jeu] : 0;
                echo '<td>' . $heures . '</td>';
         }
        echo '</tr>';
    }
    echo '<tr>
                <td>Total</td>
    foreach ($tblJeux as $jeu=>total) {
                echo '<td>' . $total. '</td>';
    }
    echo '</table>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut
    D'accord !!!
    Je me cassais vraiment la tête pour rien !
    Faire le plus simple possible c'est reçu et imprimer merci beaucoup sabotage ! ^^
    Tout mes problèmes sont résolus encore un grand merci à toi

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut
    Euh... juste le @ devant $tbljeu ça veux dire quoi ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ça évite de déclencher l'erreur au cas où la variable n'existe pas.

    En général, il n'est pas recommandé de l'utiliser (ici, ça simplifie le code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       @$tblJeux[$data['Jeux']] += $data['SommeHeure'];
    peut être remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       if(!empty($tblJeux[$data['Jeux']])){ $tblJeux[$data['Jeux']] += $data['SommeHeure']; }

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Septembre 2013
    Messages : 32
    Par défaut
    Merci pour l'explication =)

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

Discussions similaires

  1. Exporter les données dans le bon ordre
    Par frocket dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 15/11/2009, 23h11
  2. Réponses: 16
    Dernier message: 10/11/2005, 21h10
  3. Réponses: 6
    Dernier message: 23/10/2005, 12h24
  4. récupération de données dans un TDBControlGrid
    Par dableuf dans le forum Bases de données
    Réponses: 3
    Dernier message: 22/11/2004, 14h25
  5. [CR] Comment imprimer dans le bon ordre
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 18/05/2004, 11h11

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