Aller au contenu

afficher les doublons


xorban

Sujets conseillés

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

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é

Lien vers le commentaire
Partager sur d’autres sites

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 :blushing: , merci

Modifié par cyberlaura
Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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é par cyberlaura
Lien vers le commentaire
Partager sur d’autres sites

  • 10 months later...

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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