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 :

Concaténation de deux enregistrements dans une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Concaténation de deux enregistrements dans une table
    Bonjour,

    Je vous explique mon problème, j'ai une table membres (je la simplifie pour que vous compreniez mieux)
    avec un numero et un nom.

    Voici ma table :
    Code SQL : 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
    CREATE TABLE membres (
      numero int(11) NOT NULL,
      nom varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    #
    # Contenu de la table `membres`
    #
     
    INSERT INTO membres VALUES (1, 'martin');
    INSERT INTO membres VALUES (2, 'maurice');
    INSERT INTO membres VALUES (3, 'dupond');
    INSERT INTO membres VALUES (1, 'dupont');
    INSERT INTO membres VALUES (2, 'marcellin');
    INSERT INTO membres VALUES (2, 'maret');
    INSERT INTO membres VALUES (4, 'popeye');


    Je souhaiterais pouvoir faire un affichage de ces enregistrements mais que lorsque le même numéro
    revient, les noms puissent se concaténer.
    Exemple ici :
    1 donnerait martin & dupont
    2 donnerait maurice, marcellin & maret
    3 donnerait M. dupond
    4 donnerait M. popeye

    Comment faire ?

    J'arrive à faire afficher les numéros et noms, voici le fichier :


    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
     
    <?PHP
     
    echo "<center><h1>Test</h1></center>";
     
    $serveur="localhost";
    $utilisateur="root";
    $motdepasse="";
    $database="mabase";
    @mysql_connect($serveur,$utilisateur,$motdepasse) or die("<CENTER><A style='color:white;background-color:red'> Désolé, problème de serveur </BODY></HTML>");
     
    $TableRep=mysql($database,"SELECT * FROM membres ORDER BY numero") or die("<br><CENTER><A style='color:white;background-color:red'> Désolé, la table est inaccessible </BODY></HTML>");
    $NombreEntrees=mysql_num_rows($TableRep);
    ?>
    <br><table width="93%" border="0" cellspacing="0" cellpadding="0" align="center"><tr><td height="210"> 
    <p align="justify"><font color="#000000"><b><font face="Verdana, Arial" size="2">Bienvenue sur le site<br><br>
                        </font></b>
                          </p></td></tr></table><br>
     
     
    <?
     
    $i=0; /* initialisation de la variable de boucle */
     
    while ($i < $NombreEntrees) /* faire tant que la fin de la table n'est pas atteinte */ 
    	{
     
      		$numero = mysql_result($TableRep, $i, "numero");
      		$nom =mysql_result($TableRep, $i, "nom");
     
     
    		echo "<table><tr>";		
    		echo "<font size=\"1\">";		
    		echo "<td align=\"center\">";	
    		echo "\"$numero\",";
      		echo "</td>";
      		echo "<td>";
      		echo "\"$nom\",";
      		echo "</td>";
      		echo "</font>";
     
     
      		echo "</tr></table>";
       		$i++;
    	}
     
     
    echo "</body></html>";
    ?>





    Maintenant, comment faire pour vouloir faire afficher ce que je veux ???

    Actuellement, il y a :

    "1", "martin",
    "1", "dupont",
    "2", "maurice",
    "2", "marcellin",
    "2", "maret",
    "3", "dupont",
    "4", "popeye",

    Et je voudrais :

    "1", "martin & dupont",
    "2", "maurice, marcellin & maret",
    "3", "M. dupont",
    "4", "M. popeye",

    Je ne vois pas où et comment faire pour afficher le "&" avec le dernier membre du même numéro.
    Et s'ils sont plusieurs, mettre des virgules comme au numéro 3.
    Et si le membre est le seul à avoir ce numéro, j'aimerais afficher "M. " devant.

    SVP, j'ai vraiment besoin d'une aide. Merci d'avance.

    Cordialement,

    Sandy

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    On pourrait presque arriver au résultat souhaité en une requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT numero, GROUP_CONCAT(nom SEPARATOR ", ") FROM membres GROUP BY numero
    Résultat :
    1 martin, dupont
    2 maurice, marcellin, maret
    3 dupond
    4 popeye
    Reste à en modifier le résultat pour obtenir le & à sa fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $query = mysql_query('SELECT numero, GROUP_CONCAT(nom SEPARATOR ", ") AS grp FROM membres GROUP BY numero');
    while ($array = mysql_fetch_assoc($query)) {
        $pos = strrpos($array['grp'], ', ');
        if ($pos > 0) {
            $array['grp'] = substr_replace($array['grp'], ' &', $pos, 1);
        }
        echo $array['numero'] . ' : ' . $array['grp'] . '<br />';
    }
    Résultat :
    1 : martin & dupont
    2 : maurice, marcellin & maret
    3 : dupond
    4 : popeye

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Génial
    Martin est devenu Marti par contre... mais je vais chercher, je pense que je vais trouver, c'est super !

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

Discussions similaires

  1. Concaténer deux champs dans une table
    Par Yamina62 dans le forum Modélisation
    Réponses: 4
    Dernier message: 30/09/2013, 14h11
  2. Réponses: 10
    Dernier message: 12/07/2012, 14h07
  3. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07
  4. AJOUT d'un ENREGISTREMENT dans UNE TABLE
    Par ramo dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/08/2005, 16h24
  5. Différencier physiquement deux enregistrements d'une table
    Par dcollart dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 25/07/2005, 06h55

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