xorban Posté 30 Mai 2006 Posté 30 Mai 2006 Bonjour Je cherche un exemple qui maffiche que les doublons, dun champ de ma table Exemple. Dans une table, y a deux champs, nom_utilisateur et IP_joueur Je veux pouvoir afficher les doublon du champ IP_utilisateur et affiché le résultat comme ça : Nom IP -------------------------------------------------------------------------------------- utilisateur 1 212.25.38.80 utilisateur 2 212.25.38.80 utilisateur 3 212.25.38.80 --------------------------------------------------------------------------------------- utilisateur 4 80.254.31.52 utilisateur 5 80.254.31.52 --------------------------------------------------------------------------------------- ...etc si quelquun peux m'écrire un exemple qui réalise cette tache, je lui dit merci a l'avance. le code sera utiliser pour afficher les doublons dans plusieurs tables Merci encore
NorSeb Posté 30 Mai 2006 Posté 30 Mai 2006 Bonjour, La requète te suffira je pense SELECT * FROM matable GROUP BY IP_joueur
cyberlaura Posté 30 Mai 2006 Posté 30 Mai 2006 je ne sais pas faire ça en une requète, mais avec une première qui sorte les ip en double : select ip from table group by ip having count(ip)>1 et une 2eme requète qui recherche les ip du résultat de cette première requète. Si quelqu'un sait le faire en une requète, je le lirais volontiers...
NorSeb Posté 31 Mai 2006 Posté 31 Mai 2006 j'arrive pas a la faire marcher cette fonction lol C'est à dire ? Tu peux en dire plus sur ta table ? Est-ce que tu as commencé un code (pour savoir où tu en es) ? je ne sais pas faire ça en une requète, mais avec une première qui sorte les ip en double : select ip from table group by ip having count(ip)>1 et une 2eme requète qui recherche les ip du résultat de cette première requète. Si quelqu'un sait le faire en une requète, je le lirais volontiers... C'est à tester mais la première requète doit suffire... Le reste est à faire en php
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 Voici un exemple de code ( non testé ) qui devrait permettre d'afficher les IP en double : <?php print("<TABLE>"); $sql="select IP from table group by IP having count(IP)>1"; $result = mysql_db_query($database , $sql , $connexion); while ($R_table=mysql_fetch_array($result)) { $sql="select IP,NOM from table where IP='".$R_table['IP'."'"; $result2 = mysql_db_query($database , $sql , $connexion); while ($R_table2=mysql_fetch_array($result2)) { print("<TR><TD>".$R_table2['IP']."</TD><TD>".$R_table2['NOM']."</TD></TR>"); } } print("</TABLE>");?> Edit modérateur : la balise code permet une meilleure lisibilité du code affiché
Portekoi Posté 31 Mai 2006 Posté 31 Mai 2006 Bonjour, Essaie ceci : select count(*) as nbr, ip from table group by ip having count(*) > 1 Portekoi
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (modifié) Le problème de cette requète, c'est que ça va lui sortir les IP en double, mais de manière unitaire. Il n'aura pas la liste des utilisateurs associés à cette IP. En fait, il faudrait pouvoir faire un select imbriqué, du genre : SELECT * from TABLE where ip in (SELECT IP from table group by IP having count(IP)>1) Mais ce n'est pas possible en mysql et je ne connais pas l'équivalent... PS : je ne savais pas pour la balise code , merci Modifié 31 Mai 2006 par cyberlaura
Portekoi Posté 31 Mai 2006 Posté 31 Mai 2006 Il suffit de rajouter l'utilisateur.... select ip, utilisateur from table group by ip, utilisateur having count(*) > 1 Portekoi
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 Ca ne peux pas être aussi simple, cette requète ne sortira que les lignes ayant plusieurs fois la même IP et le même utilisateur. J'ai trouvé ce lien, qui donne des indications pour pallier à l'absence de requète imbriquées : mysql et les requètes imbriquées
Portekoi Posté 31 Mai 2006 Posté 31 Mai 2006 cyberlaura : Je vois pas ou est le problème. xorban veut les doublons et avec mon exemple, c'est ce qu"il aura. Que veux tu de plus? S'il souhaite tous les enregistrements, dans ce cas, il suffit d'enlever la clause Having et de récupérer le Count(*)... Non?
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 et bien, en fait, il veut les doublons, mais aussi - et c'est ça qui est plus difficile - afficher tous les utilisateurs ayant une IP en doublon. Et le group by va lui cacher la liste des utilisateurs en doublon, pour n'en afficher qu'un. C'est pourquoi il me semble que la double requète est indispensable ( en PHP ou en SQL ) : une pour extraire les IP en doublons, et une autre pour extraire les utilisateurs ayant cette IP.
cyberlaura Posté 31 Mai 2006 Posté 31 Mai 2006 (modifié) Pour Xorban : adaptation en 1 requète moins gourmande, la requète à l'intérieur d'une boucle (code précédent) étant à éviter print("<TABLE>"); $sql="CREATE TEMPORARY TABLE table_temp (IP varchar(20))"; $result = mysql_db_query($database , $sql , $connexion); $sql="INSERT INTO table_temp SELECT IP FROM table1 GROUP BY IP having count(*)>1;"; $result = mysql_db_query($database , $sql , $connexion); $sql="SELECT * FROM table1,table_temp WHERE table1.IP=table_temp.IP;"; $result = mysql_db_query($database , $sql , $connexion); while ($R_table=mysql_fetch_array($result)) { print("<TR><TD>".$R_table['IP']."</TD><TD>".$R_table['nom']."</TD></TR>"); } print("</TABLE>"); $sql="DROP TABLE table_temp;"; $result = mysql_db_query($database , $sql , $connexion); Pour Portekoi : pas de problème, j'ai mis un moment à comprendre moi aussi . Modifié 31 Mai 2006 par cyberlaura
gontran Posté 1 Avril 2007 Posté 1 Avril 2007 Bonjour le hub, je dois avoir a peu pres le meme probleme j'ai une table qui comporte plusieurs champ je voudrais supprimer les doublons je vous livre mon code $req_doublon=mysql_query("select mail, id, count(id) as num from mailing_test_temp group by mail HAVING num>1") or die(mysql_error());while ($res_doublon=mysql_fetch_array($req_doublon)) { //suppression du doublon $id_doublon=$res_doublon['id']; $mail_doublon=$res_doublon['mail']; mysql_query("delete from mailing_test_temp where id='$id_doublon'"); echo '<p>le mail '.$mail_doublon.' a été supprimmé</p>'; continue; } je crois que ca ne fonctionne pas puisque lors de son execution cette requete me trouve des doublons et quand je l'execute une 2eme fois ca m'en trouve encore merci d'avance pour votre aide
Portekoi Posté 1 Avril 2007 Posté 1 Avril 2007 Bonjour, Qu'est ce que tu veux supprimer? Les ID en double ou les mails? je pense que cela doit etre les mails donc corrige ta requete comme ceci : $req_doublon=mysql_query("select count(mail) as num from mailing_test_temp group by mail HAVING num>1") or die(mysql_error()); Puis récupère le mail. Tu ne peux pas faire un delete sur le mail sinon tu vas de supprimer les deux. Refait ensuite une requete avec à la fin un Limit 1, 1 pour le mail en question afin de reprendre l'ID d'un des deux puis, fais ensuite ton delete Bon courage Portekoi
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant