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 :

Creer tableau 2d avec resultats de requete mysql (new)


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2022
    Messages : 35
    Par défaut Creer tableau 2d avec resultats de requete mysql (new)
    Bonjour
    Je demande votre aide sur une tache. Avec votre aide j'avais pu la réaliser mais la structure du tableau ainsi que de la base de données a changé et je n'arrive plus a me retrouver.

    J'ai ma table qui est structurée comme ci dessous, j'aimerai récupérer les données et les afficher sous forme de tableau, j'essai en vain.

    La structure de ma bdd :
    Nom : bdddd.png
Affichages : 129
Taille : 13,9 Ko

    Le tableau souhaité :
    Nom : tblmes.png
Affichages : 134
Taille : 16,7 Ko

    Le lien de la précédente discussion :
    https://www.developpez.net/forums/d2...requete-mysql/

    Merci pour votre aide

    Cordialement

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 572
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 572
    Par défaut
    la 1re étape est déjà de faire un exemple de code html qui affichera le tableau avec des valeurs fixes.
    vous pouvez vous aider de ce tutoriel pour construire ce tableau :
    https://a-pellegrini.developpez.com/...-css/tableaux/

    ensuite vous utiliserez php pour faire des boucles et construire le tableau dynamiquement.

  3. #3
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Bonjour,

    Je sais que vous avez choisi l'option FETCH_GROUP pour récupérer les résultats de la requête mais ça ne veut pas dire pour autant que ça fonctionnera toujours avec cette solution.
    Etant donner qu'ici vous avez besoin d'un tableau dans le tableau pour représenter les mesures de chaque agent, vous êtes obligée de construire vous-même le tableau de réstulats.

    J'ai réécrit mon exemple et ma DB de test pour se mettre à niveau des nouveautés (https://tests.pierre-roels.com/creat...from-query.php)
    Comme vous pouvez le voir, j'ai créé manuellement mon tableau de données que je parcours en suite.
    Il est aussi possible de créer plusieurs tableaux mais je trouve toujours ça plus lisible de tout mettre dans le même tableau quand c'est possible ^^

    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
    <?php
    $db = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD);
    $db->EXEC("SET NAMES utf8");
     
    $sql = "SELECT mes, agent, valeur, piece FROM mesures  ORDER BY agent, mes, piece ASC";
     
    // On récupère les résultats
    $results = $db->query($sql)->fetchAll(PDO::FETCH_OBJ);
     
    // On prépare notre tableau vide qu'on parcourera ensuite
    $mesures = [];
    foreach ($results AS $v) {
        $mesures[$v->agent][$v->mes][$v->piece] = $v->valeur;
    }

    Pour ce qui est de la construction du tableau, le plus facile est de faire aussi des table dans des table mais on perd l'atout des colonnes, donc ici j'ai plutôt utilisé l'attribut rowspan de chaque cellule "agent".
    Ca donne ceci :
    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
    <table class="table">
        <thead>
            <tr>
                <th>agent</th>
                <th>mesure</th>
                <th>piece1</th>
                <th>piece2</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($mesures AS $agents => $agents_mesures) : ?>
                <tr>
                    <th rowspan="3"><?= $agents; ?></th>
                </tr>
     
                <?php foreach ($agents_mesures AS $mes => $pieces) : ?>
                    <tr>
                        <th><?= $mes; ?></th>
                        <?php foreach ($pieces AS $v) : ?>
                            <td>
                                <input type="number" class="form-control" value="<?= $v; ?>" />
                            </td>
                        <?php endforeach; ?>
                    </tr>
                <?php endforeach; ?>
            <?php endforeach; ?>
        </tbody>
    </table>

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2022
    Messages : 35
    Par défaut
    Bonjour darkstar123456Merci énormément pour ton aide, en plus d'avoir la solution à mon problème, j'en apprend plus.

    Ton code marche comme je souhaite, juste que le nombre de pièces est variable et n'est pas limité à 2 pour tous les cas, du coup, seul les premières colonnes sont fixes et ne changent pas. Sur le premier exemple tu me proposais une boucle afin de récupérer les noms des colonnes.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <thead>
            <tr>
                <th>agent</th> <!-- fixe-->
                <th>mesure</th>  <!-- fixe-->
                <th>piece1</th> <!--variable en fonction du nombre de pièces-->
                <th>piece2</th> <!--variable en fonction du nombre de pièces-->
            </tr>
        </thead>

    Merci pour ton aide

  5. #5
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Rebonjour,

    Content d'apprendre que ça fonctionne.
    Pour ce qui est des colonnes c'est le même principe que dans le code initial : quand on parcours les mesures, on en profite pour enregistrer les autres clés.
    Avant c'était les agents maintenant ce sont les pieces :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    // On prépare notre tableau vide qu'on parcourera ensuite
    $mesures = [];
    $pieces_types = [];
    foreach ($results AS $v) {
        $mesures[$v->agent][$v->mes][$v->piece] = $v->valeur;
        $pieces_types[$v->piece] = 1;
    }
    $pieces_types = array_keys($pieces_types);

    Il faudra donc changer la boucle qui affiche les valeurs pour boucler sur ce nouveau tableau (et vérifier si l'index existe avant d'y accéder pour éviter les erreurs) comme c'était le cas dans le code que j'ai donné avec les agents

    EDIT : j'ai mis à jour mon code sur ma page de test (https://tests.pierre-roels.com/creat...from-query.php) avec les pièces gérées par le tableau dynamique.
    Visuellement ça n'a pas changé (à part que j'affiche la liste des pièces dans les variables en dessous du tableau et que j'ai ajouté une pièce pour tester) mais je te laisse chercher un peu.
    C'est extrêmement proche de mon code initial avec les agents et c'est pas très compliqué dans le fond

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2022
    Messages : 35
    Par défaut
    Grand merci à toi pour ton aide!
    Je viens d'essayer et ca marche super.

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

Discussions similaires

  1. Creer tableau 2d avec resultats de requete mysql
    Par Devas225 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/06/2022, 12h36
  2. [PHP 5.6] Tableau - Separations de resultats de requetes
    Par jack77b dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2015, 03h44
  3. [MySQL] Découper un resultat de requete Mysql en plusieurs pages
    Par ots2 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/12/2010, 08h08
  4. resultats de requete mysql
    Par philoupuke dans le forum MySQL
    Réponses: 1
    Dernier message: 08/10/2010, 09h22
  5. Réponses: 2
    Dernier message: 01/06/2009, 16h50

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