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 :

tableau résultat en colonne [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 30
    Par défaut tableau résultat en colonne
    Bonjour,

    je cherche à faire un tableau avec des résultats en colonnes, présentant les notes des élèves pour une matière.

    La première colonne montre le nom des élèves
    puis pour chaque contrôle, il y a une note par colonne. Cela donne :

    Nom de l'élève 2019.01.01 Examen 2019.01.02 Test 2019.01.02 test
    Jean 15 20 20
    Pierre 18 15 15


    J'ai réussi ma requête, Mais je n'arrive pas à faire mon titre "datecode" qui est la date + le type de test.

    Ma requete fonctionnante :

    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
    $sql = "SELECT CONCAT(t.date,'<br>', w.name) as datecode, CONCAT(s.firstname,' ', s.name) as student, l.niveau, t.code as code 
    FROM testline l, test t, registration r, entry e, student s, worktype w 
    WHERE t.code=l.test AND
    w.code = t.worktype AND
    t.year=r.year AND
    t.semester=r.semester AND
    t.classe=r.classe AND
    l.student=r.student AND
    e.registration=r.code AND
    t.course=e.course AND 
    s.code=l.student AND 
    t.year='2019' AND 
    t.semester='1 Semestre' AND 
    t.classe = '2' AND 
    t.course= 'Biologie'
    order by t.code";
     
    	$result=mysql_query($sql);
    	$dates = array();
        $niveauEs = array();
    	$result=mysql_query($sql);
    Maintenant mon erreur est ici, Je n'ai en titre qu'un code, mais je voudrais "datecode" , Pouver vous m'aider s'il vous plait ?

    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
    $data = array();
    $dates = array();
     
    while ($row=mysql_fetch_array($result)) 
    { // fetching result
        if(!isset($data[$row['student']])) 
    	{
            $data[$row['student']] = array();
        }     
     
        if(!isset($data[$row['student']][$row['code']])) 
    	{
            $data[$row['student']][$row['code']] = array();
        }    
     
        if(!in_array($row['code'], $dates)) 
    	{
            $dates[] = $row['code'];
        }
     
        $data[$row['student']][$row['code']] = $row['niveau'];
    }
    ?>
     
    <table width="80%" border="2" align="center" class="table-style-two">
    <thead>
        <th width="80px">Schüler</th>
     
        <?php foreach($dates AS $date) : ?>
            <th width="50px"><?=$date?></th>
        <?php endforeach; ?>
    </thead>
    <tbody>
     
        <?php foreach($data AS $student => $entries) : ?>
        <tr>
            <td><?=$student?></td>
     
            <?php foreach($dates AS $date) : ?>
                <td><?=(isset($data[$student][$date])?$data[$student][$date]:'')?></td>
            <?php endforeach; ?>
        </tr>
        <?php endforeach; ?>
     
    </tbody>
    </table>
    Une petite aide serait sympa....

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Heu, il y a du boulot.

    Déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CONCAT(t.date,'<br>', w.name) as datecode
    , le code html <br> , fais quoi dans la requête SQL ? , si c'est pour un passage à la ligne, c'est n'importe quoi.

    Il faudrait déjà avoir un jeu de données retourné par la requête pour voir comment la parcourir correctement.

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il est possible de faire comme suit.

    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
     
    <?php
    //---- DATABASE
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=UTF8',DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $query     = "SELECT dateexam, nom, note as customer_name FROM `exams` order by nom, dateexam";
    $prepared  = $bdd->prepare($query);
    $prepared->execute();
    //--- parcours des données
    $arrNoms   = array();
    $arrDates  = array();
    $arrExamen = array();
    while (list($dateexam, $nom, $note) = $prepared->fetch()) {
     
     if (!isset($arrNoms[$nom]))       $arrNoms[$nom]       = $nom;
     if (!isset($arrDates[$dateexam])) $arrDates[$dateexam] = $dateexam;
     $arrExamen[$nom][$dateexam] = $note;
    }
    //--- Tri des abscisses et ordonnées
    ksort($arrNoms);
    ksort($arrDates);
    //--- on comble les trous s'il y en a
    $arrResultat = array();
    foreach ($arrDates as $keyDates => $valDate) {
     
     foreach ($arrNoms as $keyNoms => $valNom) {
      $arrResultat[$keyNoms][$keyDates] = isset($arrExamen[$keyNoms][$keyDates]) ? $arrExamen[$keyNoms][$keyDates] : '-';
     }
    }
    //--- Création du tableau
    $tableau   = array();
    $tableau[] = "<table style='text-align: center'>";
    $tableau[] = "<tr><td></td><td>".implode("</td><td>",$arrDates)."</td></tr>";
    foreach ($arrNoms as $keyNoms => $indexNoms) {
      $tableau[] = "<tr><td>$keyNoms</td><td>".implode("</td><td>",$arrResultat[$keyNoms])."</td></tr>";
    }
    $tableau[] = "</table>";
    print implode(PHP_EOL,$tableau);
    ?>

    Le tri ne tient pas compte des valeurs UTF-8 mais ce n'est pas ce qui est important.

    Nom : Capture20190116_001.JPG
Affichages : 446
Taille : 19,2 Ko

    exams.sql

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 30
    Par défaut
    Salut badaze,

    Mais si tu as 2 Exams pour la même personne le même jour ta solution plante comme la mienne
    Il faudrait 2 colonnes avec la même date. Or ici il n'y a qu'une colonne avec qu'une date et une note.
    Donc 1 note est tronquée.

    Il y a des profs qui mettent 2 Exams par jour pour la même personne

    Sais-tu comment résoudre ce truc ?
    Il faudrait 2 colonnes avec la même date.



    Citation Envoyé par badaze Voir le message
    Il est possible de faire comme suit.

    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
     
    <?php
    //---- DATABASE
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=UTF8',DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $query     = "SELECT dateexam, nom, note as customer_name FROM `exams` order by nom, dateexam";
    $prepared  = $bdd->prepare($query);
    $prepared->execute();
    //--- parcours des données
    $arrNoms   = array();
    $arrDates  = array();
    $arrExamen = array();
    while (list($dateexam, $nom, $note) = $prepared->fetch()) {
     
     if (!isset($arrNoms[$nom]))       $arrNoms[$nom]       = $nom;
     if (!isset($arrDates[$dateexam])) $arrDates[$dateexam] = $dateexam;
     $arrExamen[$nom][$dateexam] = $note;
    }
    //--- Tri des abscisses et ordonnées
    ksort($arrNoms);
    ksort($arrDates);
    //--- on comble les trous s'il y en a
    $arrResultat = array();
    foreach ($arrDates as $keyDates => $valDate) {
     
     foreach ($arrNoms as $keyNoms => $valNom) {
      $arrResultat[$keyNoms][$keyDates] = isset($arrExamen[$keyNoms][$keyDates]) ? $arrExamen[$keyNoms][$keyDates] : '-';
     }
    }
    //--- Création du tableau
    $tableau   = array();
    $tableau[] = "<table style='text-align: center'>";
    $tableau[] = "<tr><td></td><td>".implode("</td><td>",$arrDates)."</td></tr>";
    foreach ($arrNoms as $keyNoms => $indexNoms) {
      $tableau[] = "<tr><td>$keyNoms</td><td>".implode("</td><td>",$arrResultat[$keyNoms])."</td></tr>";
    }
    $tableau[] = "</table>";
    print implode(PHP_EOL,$tableau);
    ?>

    Le tri ne tient pas compte des valeurs UTF-8 mais ce n'est pas ce qui est important.

    Nom : Capture20190116_001.JPG
Affichages : 446
Taille : 19,2 Ko

    exams.sql

  6. #6
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Si tu avais précisé d'entrée de jeu qu'il pouvait y avoir plusieurs exams par jour je l'aurai tout de suite pris en compte.

    Ici tout est question de clé. La clé "date" ne va pas ? Alors on fait une clé "date" "examen" mais le reste de l'algorithme ne change pas.

    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
     
    <?php
    //---- DATABASE
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.';charset=UTF8',DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $query     = "SELECT dateexam, nom, note, idexam FROM `exams` order by nom, dateexam, idexam";
    $prepared  = $bdd->prepare($query);
    $prepared->execute();
    //--- parcours des données
    $arrNoms   = array();
    $arrDates  = array();
    $arrExamen = array();
    while (list($dateexam, $nom, $note, $idexam) = $prepared->fetch()) {
     
     if (!isset($arrNoms[$nom]))       $arrNoms[$nom]       = $nom;
     if (!isset($arrDates[$dateexam.$idexam])) $arrDates[$dateexam.$idexam] = $dateexam.'/'.$idexam;
     $arrExamen[$nom][$dateexam.$idexam] = $note;
    }
    //--- Tri des abscisses et ordonnées
    ksort($arrNoms);
    ksort($arrDates);
    //--- on comble les trous s'il y en a
    $arrResultat = array();
    foreach ($arrDates as $keyDates => $valDate) {
     
     foreach ($arrNoms as $keyNoms => $valNom) {
      $arrResultat[$keyNoms][$keyDates] = isset($arrExamen[$keyNoms][$keyDates]) ? $arrExamen[$keyNoms][$keyDates] : '-';
     }
    }
    //--- Création du tableau
    $tableau   = array();
    $tableau[] = "<table style='text-align: center;' border=1 >";
    $tableau[] = "<tr ><td></td><td>".implode("</td><td>",$arrDates)."</td></tr>";
    foreach ($arrNoms as $keyNoms => $indexNoms) {
      $tableau[] = "<tr><td>$keyNoms</td><td>".implode("</td><td>",$arrResultat[$keyNoms])."</td></tr>";
    }
    $tableau[] = "</table>";
    print implode(PHP_EOL,$tableau);
    ?>


    Nom : Capture20190201_002.JPG
Affichages : 336
Taille : 67,6 Ko

    exams_002.sql

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 30
    Par défaut
    merci badaze
    Ca marche bien.

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

Discussions similaires

  1. [FPDF] problème tableau FPDF en PHP/MySQL
    Par ZeRedDiamond dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/03/2015, 08h11
  2. [MySQL] Tableau 2 dimension php\MySql
    Par enamorada dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 25/11/2012, 16h47
  3. [MySQL] Tableau dynamique via Php/Mysql quel format d'exportation choisir?
    Par xeloch dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/04/2012, 08h43
  4. [MySQL] Tableau financier en PHP/MySQL
    Par 512banque dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 13/10/2008, 15h03

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