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 :

Regrouper les mêmes enregistrements dans un tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut Regrouper les mêmes enregistrements dans un tableau
    Bonsoir, j'ai une table 'news' dans la quelle j'ai un champ "nom" et je souhaiterais regroupé tous les données des gens qui ont le même nom dans un tableau, avec le "nom" affiché en haut du tableau, et répété cette opération pour chaque "nom" différent, tous ca sur la meme page !

    je pense qu'il faut utilisé GROUP BY, mais comment faire pour couper les tableaux par le nom de la personnes concerné ?

    voici ce que j'ai fait pour afficher mon tableau :
    (ps: j'ai aussi réussi à mettre une couleur différente pour chaque ligne )
    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
    <table><tr bgcolor="#FFCC66">
    <th>Modifié</th>
    <th>Fait le</th>
    <th>Identité</th>
    <th>Date de la garde</th>
    <th>Type de garde</th>
    <th>Etat</th>
    <th>Signature</th>
    </tr>
    <?php
    $indice = 0;
    $retour = mysql_query("SELECT * FROM gardes WHERE mois='$nextmois_complet $annee' AND etat='Envoyé' ORDER BY id DESC");
    while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les garde
    {
    $reste = $indice % 2;
    if($reste == 0)
         {
    ?>
    <tr bgcolor="#FFFFFF">
    <td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    <td><?php echo stripslashes($donnees['nom']); ?></td>
    <td><?php echo stripslashes($donnees['date']); ?></td>
    <td><?php echo stripslashes($donnees['creneau']); ?></td>
    <td><?php echo stripslashes($donnees['etat']); ?></td>
    <td><?php echo stripslashes($donnees['signature']); ?></td>
    </tr>
    <?php
    }
    else
         {
    ?>
    <tr bgcolor="#DDDDDD">
    <td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    <td><?php echo stripslashes($donnees['nom']); ?></td>
    <td><?php echo stripslashes($donnees['date']); ?></td>
    <td><?php echo stripslashes($donnees['creneau']); ?></td>
    <td><?php echo stripslashes($donnees['etat']); ?></td>
    <td><?php echo stripslashes($donnees['signature']); ?></td>
    </tr>
    <?
         }
    $indice++;
    } // Fin de la boucle qui liste les garde
    ?>
    </table>

    Merçi pour votre aide

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 224
    Points
    8 224
    Billets dans le blog
    17
    Par défaut
    Tu peux indexer tes enregistrements dans un array d'après le champ nom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data = array( ) ;
    while ( $tuple = mysql_fetch_array($rs) ) {
        $data[$tuple['nom']][ ] = $tuple ;
    }
    Et ensuite boucler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach ( $data as $nom => $tuples ) {
        echo $nom, '<br>' ;
        foreach ( $tuples as $tuple ) {
             // Affichage d'un enregistrement
        }
    }
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Peut-être plus léger pour tes couleurs de ligne :
    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
    <table><tr bgcolor="#FFCC66">
    <th>Modifié</th>
    <th>Fait le</th>
    <th>Identité</th>
    <th>Date de la garde</th>
    <th>Type de garde</th>
    <th>Etat</th>
    <th>Signature</th>
    </tr>
    <?php
    $color = '#DDDDDD';
    $nom='';
    $retour = mysql_query("SELECT * FROM gardes WHERE mois='$nextmois_complet $annee' AND etat='Envoyé' ORDER BY id DESC");
    while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les garde
    {
    	$color = ($color == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD' ;
    	?>
    	<tr bgcolor="<?php echo $color; ?>">
    	<td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    	<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    	<td><?php echo stripslashes($donnees['nom']); ?></td>
    	<td><?php echo stripslashes($donnees['date']); ?></td>
    	<td><?php echo stripslashes($donnees['creneau']); ?></td>
    	<td><?php echo stripslashes($donnees['etat']); ?></td>
    	<td><?php echo stripslashes($donnees['signature']); ?></td>
    	</tr>
    	<?php
    } // Fin de la boucle qui liste les garde
    ?>
    </table>
    Fred

  4. #4
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Bonjour, déja merçi d'avance pour votre aide, merçi à toi micetf pour le code des couleur, ca m'allége bien mais par contre j'ai fait ce que tu ma dit seb, j'ai les nom de ma table qui s'affiche en haut de mon tableau mais pa de données , et des messages d'erreur pour chaque colonnes,
    (Notice: Undefined variable: donnees in c:\program files\easyphp1-8\www\aut\liste_garde_rh(cop).php on line 124)

    voici mon code actuel :
    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
    <?php
    $color = '#DDDDDD';
    $nom='';
    $retour = mysql_query("SELECT * FROM gardes WHERE mois='$nextmois_complet $annee' AND etat='Envoyé' ORDER BY id DESC");
    $data = array( ) ;
    while ( $tuple = mysql_fetch_array($retour) ) {
        $data[$tuple['nom']][ ] = $tuple ;
    }
    //while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les garde
    //{
    $color = ($color == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD' ;
    ?>
    <tr bgcolor="<?php echo $color; ?>">
    <td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    <td><?php echo stripslashes($donnees['nom']); ?></td>
    <td><?php echo stripslashes($donnees['date']); ?></td>
    <td><?php echo stripslashes($donnees['creneau']); ?></td>
    <td><?php echo stripslashes($donnees['etat']); ?></td>
    <td><?php echo stripslashes($donnees['signature']); ?></td>
    </tr>
    <?
    foreach ( $data as $nom => $tuples ) {
        echo $nom, '<br>' ;
        foreach ( $tuples as $tuple ) {
             // Affichage d'un enregistrement
        }
    }
    ?>
    peu etre j'ai mal placé le code !!

  5. #5
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Est-ce que la clause
    ORDER BY nom
    ne te permettrait déjà pas de ranger tes enregistrements dans le bon ordre ?
    Fred

  6. #6
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    si mais, mais les erreurs apparaissent, dans chacune des colonnes :
    (Notice: Undefined variable: donnees in c:\program files\easyphp1-8\www\aut\liste_garde_rh(cop).php on... )

    voici le code complet de ma page :

    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
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("pompier");
    //-----------------------------------------------------
    // Vérification 1 : est-ce qu'on veut poster une garde ?
    //-----------------------------------------------------
    if (isset($_POST['nom']) AND isset($_POST['date']) AND isset($_POST['mois']) AND isset($_POST['creneau']) AND isset($_POST['etat']) AND isset($_POST['signature']))
    {
    	$nom = addslashes($_POST['nom']);
        $date = addslashes($_POST['date']);
    	$mois = addslashes($_POST['mois']);
    	$creneau = addslashes($_POST['creneau']);
    	$etat = addslashes($_POST['etat']);
    	$signature = addslashes($_POST['signature']);
     
        // On vérifie si c'est une modification de garde ou pas
        if ($_POST['id_garde'] == 0)
        {
            // Ce n'est pas une modification, on crée une nouvelle entrée dans la table
            mysql_query("INSERT INTO gardes VALUES('', '" . $nom . "', '" . $date . "', '" . $mois . "', '" . $creneau . "', '" . $etat . "', '" . $signature . "', '" . time() . "')");
        }
        else
        {
            // On protège la variable "id_garde" pour éviter une faille SQL
            $_POST['id_garde'] = addslashes($_POST['id_garde']);
            // C'est une modification, on met juste à jour le titre et le date
            mysql_query("UPDATE gardes SET nom='" . $nom . "', date='" . $date . "', mois='" . $mois . "', creneau='" . $creneau . "', etat='" . $etat . "', signature='" . $signature . "' WHERE id='" . $_POST['id_garde'] . "'");
        }
    }
     
    //--------------------------------------------------------
    // Vérification 2 : est-ce qu'on veut supprimer une garde ?
    //--------------------------------------------------------
    if (isset($_GET['supprimer_garde'])) // Si on demande de supprimer une garde
    {
        // Alors on supprime la garde correspondante
        // On protège la variable "id_garde" pour éviter une faille SQL
        $_GET['supprimer_garde'] = addslashes($_GET['supprimer_garde']);
        mysql_query('DELETE FROM gardes WHERE id=\'' . $_GET['supprimer_garde'] . '\'');
    }
    ?>
    <table><tr bgcolor="#FFCC66">
    <th>Modifié</th>
    <th>Fait le</th>
    <th>Identité</th>
    <th>Date de la garde</th>
    <th>Type de garde</th>
    <th>Etat</th>
    <th>Signature</th>
    </tr>
    <?php
    $color = '#DDDDDD';
    $nom='';
    $retour = mysql_query("SELECT * FROM gardes WHERE mois='$nextmois_complet $annee' AND etat='Envoyé' ORDER BY id DESC");
    $data = array( ) ;
    while ( $tuple = mysql_fetch_array($retour) ) {
        $data[$tuple['nom']][ ] = $tuple ;
    }
    //while ($donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les garde
    //{
    $color = ($color == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD' ;
    ?>
    <tr bgcolor="<?php echo $color; ?>">
    <td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    <td><?php echo stripslashes($donnees['nom']); ?></td>
    <td><?php echo stripslashes($donnees['date']); ?></td>
    <td><?php echo stripslashes($donnees['creneau']); ?></td>
    <td><?php echo stripslashes($donnees['etat']); ?></td>
    <td><?php echo stripslashes($donnees['signature']); ?></td>
    </tr>
    <?
    foreach ( $data as $nom => $tuples ) {
        echo $nom, '<br>' ;
        foreach ( $tuples as $tuple ) {
             // Affichage d'un enregistrement
        }
    }
    ?>
    Mais le probléme dois venir de ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    <td><?php echo stripslashes($donnees['nom']); ?></td>
    <td><?php echo stripslashes($donnees['date']); ?></td>
    <td><?php echo stripslashes($donnees['creneau']); ?></td>
    <td><?php echo stripslashes($donnees['etat']); ?></td>
    <td><?php echo stripslashes($donnees['signature']); ?></td>

  7. #7
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    En fait,
    il me semble que le code de Seb.
    remplit la même fonction que le ORDER BY nom.

    A condition de bien l'utiliser.

    Ce que je suggérais,
    c'était de garder ton code initial
    en mettant la clause ORDER BY sur le champ 'nom' de ta table au lieu de 'id'.

    Et,
    à priori,
    tu devrais obtenir un seul tableau, certes,
    mais avec
    d'abord toutes les gardes de Arthur,
    ensuite toutes les gardes de Bernard
    ...

    Il ne te resterait alors plus qu'à gérer l'affichage
    pour en faire plusieurs tableaux.

    Fred.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    oui je comprend ce que tu veux dire, mais dans mon cas c'est bel est bien l'affichage que je ne sais pas géré !

  9. #9
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Alors regarde peut-être ça avec le ORDER BY nom :
    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
    $nom='';
    $retour = mysql_query("SELECT * FROM gardes WHERE mois='$nextmois_complet $annee' AND etat='Envoyé' ORDER BY nom DESC");
     
    while ( $donnees = mysql_fetch_array($retour) ) {
     
    	if ($nom !=$donnees['nom']) {
    		if ($nom != '') {
    ?>
    	</table>
    <?php 
    		}
    		$nom = $donnees['nom'];
    		$color = '#DDDDDD';
    ?>
    	<table><tr bgcolor="#FFCC66">
    	<th>Modifié</th>
    	<th>Fait le</th>
    	<th>Identité</th>
    	<th>Date de la garde</th>
    	<th>Type de garde</th>
    	<th>Etat</th>
    	<th>Signature</th>
    	</tr>
    	<?php
    	}
     
    	$color = ($color == '#DDDDDD') ? '#FFFFFF' : '#DDDDDD' ;
    	?>
    	<tr bgcolor="<?php echo $color; ?>">
    	<td><?php echo '<a href="rediger_garde_rh.php?modifier_garde=' . $donnees['id'] . '">'; ?>Modifie</a></td>
    	<td><?php echo date('d/m/Y', $donnees['timestamp']); ?></td>
    	<td><?php echo stripslashes($donnees['nom']); ?></td>
    	<td><?php echo stripslashes($donnees['date']); ?></td>
    	<td><?php echo stripslashes($donnees['creneau']); ?></td>
    	<td><?php echo stripslashes($donnees['etat']); ?></td>
    	<td><?php echo stripslashes($donnees['signature']); ?></td>
    	</tr>
    	<?php
    }
    Fred

  10. #10
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Merci beaucoup ça fonctionne à merveille, maintenant je vais essayé de comprendre le code.
    UN GRAND GRAND MERCI

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/01/2014, 16h20
  2. [AC-2003] Filtrer les enregistrements dans un tableau
    Par chougadosu dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/06/2010, 13h15
  3. [RegEx] Rechercher des éléments et les enregistrés dans un tableau
    Par arnaudperfect dans le forum Langage
    Réponses: 4
    Dernier message: 21/03/2010, 22h41
  4. Comment attraper tous les noeud d'un même type dans un tableau
    Par lodan dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 01/04/2007, 16h36
  5. Réponses: 15
    Dernier message: 02/12/2005, 17h12

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