Aller au contenu

Comment concaténer deux enregistrements en un seul svp ?


Sujets conseillés

Posté

Bonjour,

J'ai une table de membres avec certains qui ont le même numéro de téléphone.

J'aimerais pouvoir ne former plus qu'un enregistrement, c'est-à dire que le champ "nom" aura pour valeur le "nom du membre" & "le nom de l'autre membre" avec le même numéro et dans le même enregistrement.

Comment faire svp ?

Posté

Le mieux, c'est de faire deux tables, une table avec le numero et l'autre avec les noms mais je n'ai jamais vu 2 noms differents avoir le meme numero de telephone ;)

Posté

Merci mais comment faire pour lorsque je trouve le même numéro insérer dans une autre table ???

Quelle est la condition, if ??

Je n'arrive pas à traduire "si plusieurs numéros sont égales alors les insérer dans l'autre table"...

Posté (modifié)

Je réexplique mieux :

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 :

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 :

<?PHP

echo "<center><h1>Test</h1></center>";

$serveur="localhost";
$utilisateur="root";
$motdepasse="";
$database="mabase";
_AT_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

Modifié par NorSeb
Posté

Bonjour,

Comme début de solution, tu peux conserver le numéro dans une variable. Tant que celle-ci ne "bouge" pas, tu concatène.

Lorsqu'elle "change", tu changes de ligne et tu recommence à concaténer. C'est une premiere solution mais elle ne te permettra pas facilement de faire la mise en forme que tu veux, le mieux étant d'avoir le nombre de noms pour chaque numéro.

Posté

Alors, j'ai fais ça mais ça n'affiche pas exactement ce que je veux...

<?PHP

echo "<center><h1>Test</h1></center>";

$serveur="localhost";
$utilisateur="root";
$motdepasse="";
$database="mabase";
_AT_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-1) /* faire tant que la fin de la table n'est pas atteinte */
{

$numero = mysql_result($TableRep, $i, "numero");
$numero2 = mysql_result($TableRep, $i+1, "numero");
$nom =mysql_result($TableRep, $i, "nom");
$nom2 =mysql_result($TableRep, $i+1, "nom");

if ($numero==$numero2)
{

echo "<table><tr>";
echo "<font size=\"1\">";
echo "<td align=\"center\">";
echo "\"$numero\",";
echo "</td>";
echo "<td>";
echo "\"$nom & $nom2\",";
echo "</td>";
echo "</font>";
echo "</tr></table>";
}

else
{

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>";
?>

ça m'affiche :

"1","martin & dupont","1","dupont","2","maurice & marcellin","2","marcellin & maret","2","maret","3","dupont",

au lieu de :

"1", "martin & dupont",

"2", "maurice, marcellin & maret",

"3", "M. dupont",

"4", "M. popeye",

Y a quelque chose qui ne va pas... :?:

Posté

Ce résultat est normal... As-tu essayé de faire le déroulement de ton script sur papier ?

Il n'y a pas mieux pour comprendre un comportement ;)

Commence par stocker le 1er numéro puis compares-le au numéro en cours... Si c'est le même, tu concatène, sinon tu change de ligne et tu recommence.

Posté (modifié)

Je sais que c'est tout simple mais je n'arrive pas à stocker le 1er numéro.

Comment on le stocke ??

C'est ça ?

$numero = mysql_result($TableRep, $i, "numero");

et ensuite, pour le comparer, je dois faire un "if" dans la boucle while ?

if ($numero==$numero+1) { echo "...les noms"; } else { echo "...le nom"; }

Modifié par sanddy
Posté

Punaise, je n'arrive toujours pas...

Je sais que ce n'est vraiment pas terrible comme proposition mais si vous me faites réussir à régler ce problème, webmasters, je peux mettre votre lien sur mon site http://www.tesannonces.com PR 5 sur la page d'accueil pendant un mois de façon visible...

Je n'arrive pas à savoir comment faire afficher le numéro en cours et le comparer avec le numéro suivant... :( comme je l'explique ci-dessus...

Posté

Voici la logique :

Sql = Ta_requete

Boucle

si numero != SQL_numero et numero <> "" alors

affiche numero . " " . TXT_Nomclient . "<br>"

//on vide la variable

TXT_Nomclient = ""

//on prend l'enregistrement en cours

TXT_Nomclient = TXT_Nomclient . " " . SQL_Nomclient

Sinon

TXT_Nomclient = TXT_Nomclient . " " . SQL_Nomclient

fin si

numero = SQL_numero

Fin de Boucle

A tester mais c'est l'idée :)

Portekoi

Posté (modifié)

J'ai fait :

<?PHP

echo "<center><h1>Test</h1></center>";

$liendb = mysql_connect("localhost", "root", "");
mysql_select_db("mabase");

$sql = "SELECT * FROM membres ORDER BY numero";

$resultat = mysql_query($sql) or die(mysql_error());

$n = mysql_num_rows($resultat);

?>
<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 ($donnees = mysql_fetch_array($resultat) )
{

$numero = mysql_result($resultat, $i, "numero");
$numero2 = mysql_result($resultat, $i+1, "numero");
$nom =mysql_result($resultat, $i, "nom");
$nom2 =mysql_result($resultat, $i+1, "nom");

echo "<table><tr>";
echo "<font size=\"1\">";
echo "<td align=\"center\">";
echo $donnees['numero'];
echo "</td>";
echo "<td>";

if ($numero!=$donnees['numero'] && $numero!= "")
{

echo ucfirst($nom).",";
}
else {

echo ucfirst($nom)." & ".ucfirst($nom2); }
echo "</td>";
echo "</font>";
echo "</tr></table>";

$i++;
}


echo "</body></html>";
?>

Et ça m'affiche :

1Martin & Dupont

2Dupont,

2Maurice & Marcellin

2Marcellin & Maret

3Maret,

4Dupont,

Hors, je voudrais qu'une fois que Dupont est affiché une fois, qu'il ne se réaffiche pas et que lorsqu'il y en a plusieurs qui ont le même numéro, le nom du membre soit "nom1, nom2, nom3 & nom4" ou simplement "nom" s'il y en a qu'un ou "nom1 & nom2" s'il y en a 2...

Il me manque quelque chose que je n'arrive pas a régler... car je voudrais afficher :

"1", "martin & dupont",

"2", "maurice, marcellin & maret",

"3", "M. dupont",

"4", "M. popeye"

Merci déjà pour vos réponses.

Modifié par captain_torche
Merci d'utiliser la balise CODEBOX pour présenter des codes longs (captain_torche, modérateur)
  • 2 semaines plus tard...
Posté

De manière logique, il y a des membres et des numéros de telephone. La relation logique entre les deux : un numéro de téléphone peut être associé à plusieurs membres.

A partir de là, tout est fait, il suffit de faire la base de données :

- Table membre : id, id_tel, nom etc...

- Table Telephone : id_tel, numero

Trouver les membres qui ont le numero 555-6655 :

- Récuperer l'id_tel correspondant à ce numéro

- Récuperer les membres dont id_tel = à l'id recuperé juste avant.

C'est une simple relation "one-to-many".

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...