sanddy Posté 5 Juillet 2007 Posté 5 Juillet 2007 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 ?
smile Posté 6 Juillet 2007 Posté 6 Juillet 2007 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
sanddy Posté 6 Juillet 2007 Auteur Posté 6 Juillet 2007 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"...
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 (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 : <?PHPecho "<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é 9 Juillet 2007 par NorSeb
NorSeb Posté 9 Juillet 2007 Posté 9 Juillet 2007 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.
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 Alors, j'ai fais ça mais ça n'affiche pas exactement ce que je veux... <?PHPecho "<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...
NorSeb Posté 9 Juillet 2007 Posté 9 Juillet 2007 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.
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 (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é 9 Juillet 2007 par sanddy
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 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...
Portekoi Posté 9 Juillet 2007 Posté 9 Juillet 2007 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
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 (modifié) J'ai fait : <?PHPecho "<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é 9 Juillet 2007 par captain_torche Merci d'utiliser la balise CODEBOX pour présenter des codes longs (captain_torche, modérateur)
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 Bon, je pense avoir résolu mon problème... Merci pour vos réponses.
Portekoi Posté 9 Juillet 2007 Posté 9 Juillet 2007 Le code que tu as mis au dessus n'est pas la logique que je t'ai donnée Mais si ca marche autrement, tant mieux
sanddy Posté 9 Juillet 2007 Auteur Posté 9 Juillet 2007 J'ai fait autrement ensuite lol mais c'est vrai que je manque de logique
Portekoi Posté 9 Juillet 2007 Posté 9 Juillet 2007 L'algorithme est à l'informatique ce que le solfège est à la musique
vanadium Posté 21 Juillet 2007 Posté 21 Juillet 2007 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".
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant