Aller au contenu

Sujets conseillés

Posté

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

Posté

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

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

Posté

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é

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

Modifié par cyberlaura
Posté

Il suffit de rajouter l'utilisateur....

select ip, utilisateur from table group by ip, utilisateur  having count(*) > 1

Portekoi

Posté

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

Posté

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?

Posté

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.

Posté (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é par cyberlaura
  • 10 months later...
Posté

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

Posté

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

Veuillez vous connecter pour commenter

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



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