JeuWeb - Crée ton jeu par navigateur
[Réglé] Grouper des Ip's - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Réglé] Grouper des Ip's (/showthread.php?tid=488)

Pages : 1 2


[Réglé] Grouper des Ip's - Pyl - 25-03-2007

Voila, dans mon systeme de verification d'Ip's j'aimerais grouper les pseudos des joueurs par adresse Ip's. Vous voyez ce que je veux dire ?

Code PHP :
<?php 
$retour
= mysql_query("SELECT * FROM membres WHERE verif_multi='0' ORDER BY ip");
while (
$donnees = mysql_fetch_array($retour)) // On fait une boucle pour lister les news
{
echo
'<tr><td>'.$donnees['joueur_pseudo'].'</td><td>'.$donnees['ip'].'</td><td><a href="mailto:'.$donnees['joueur_email'].'">'.$donnees['joueur_email'].'</a></td><td><form method="post" action="admin.php?page=9&id='.$donnees['id'].'" value="supprimer"><input type="submit" value="Supprimer" name="valider"></form></td></tr>';
}

Actuellement c'est ça, ça m'affiche tout ceux ou verif_multi = 0.
Mais je voudrais donc encore plus trier en ne m'affichant que ceux qui on la même Ip's

merci d'avance


RE: Grouper des Ip's - Raoull - 25-03-2007

Un truc du genre
Code PHP :
<?php 
SELECT
* FROM membres GROUP BY ip ORDER BY ip DESC
devrait permettre de t'afficher toutes les ips multiples


RE: Grouper des Ip's - Pyl - 25-03-2007

Malheureusement ça change rien Confused

merci quand même..
Je vais continuer de chercher une solution


RE: Grouper des Ip's - orditeck - 25-03-2007

J'ai cherché comme un fou, mais je n'ai réussi qu'à faire cette requête :

Code PHP :
<?php 
SELECT a
.id,a.login,a.ip FROM membres a JOIN membres b ON a.ip = b.ip GROUP BY a.ip
Edit : ça revient au même que faire « SELECT id,login,ip FROM membre GROUP BY ip », le JOIN c'était pour des tests, désolé ;P
Edit2 : « SELECT a.id,a.login,a.ip FROM membre a JOIN membre b GROUP BY a.ip=b.ip » cache encore un résultat... je comprend pas.

Je ne sais pas pourquoi, mais elle n'affiche pas le premier résultat :S
Elle affiche seulement à partir du deuxième et +

Quelqu'un aurait une idée ?


RE: Grouper des Ip's - Haiken - 25-03-2007

SELECT * FROM membres WHERE verif_multi='0' GROUP BY ip HAVING count(*)>1 ORDER BY ip


RE: Grouper des Ip's - kEkRkIkC - 26-03-2007

Si vous groupez les IPs vous n'aurez qu'une ligne par ip
Ceci devrait fonctionner, je n'ai pas trouvé plus simple :

Code :
SELECT * FROM membres M where M.ip in (select ip from membres MM where MM.id != M.id and MM.verif_multi='0') and M.verif_multi='0' order by M.ip



RE: Grouper des Ip's - orditeck - 26-03-2007

Code :
SELECT * FROM membres M where M.ip in (select ip from membres MM where MM.id != M.id and MM.verif_multi='0') and M.verif_multi='0' order by M.ip

Complement parfait.
+1 Big Grin


RE: Grouper des Ip's - Pyl - 26-03-2007

Smile
Je ferais ça se soir ^^
La je file en cours.

Merci beaucoup, j'aurais apprit quelques choses :good:


RE: Grouper des Ip's - Roworll - 26-03-2007

La requête avec le WHERE ... IN est en effet pas mal mais elle n'est pas supportée par toutes les versions et utilise deux fois la même table.

Celle-ci fonctionne en MySQL 4.025
Code :
SELECT joueur_pseudo, ip, COUNT(*) FROM members GROUP BY ip HAVING COUNT(*) > 1



RE: Grouper des Ip's - Haiken - 26-03-2007

Certes mais comme expliqué par kEkRkIkC on demandait 1 ligne par pseudo, le group by n'en renvoit qu'une par ip, et donc un seul pseudo sur les x pseudos ayant la même ip (mea culpa d'avoir aussi posté trop vite)

Avec MySQL 5, on pourrait utiliser GROUP_CONCAT pour n'utiliser qu'une seule fois la table (mais ce n'est pas forcément un mal d'utiliser 2 fois la même table)

Une variante de la bonne solution, mais sans IN (que MySQL optimise parfois très mal) :
SELECT M.* FROM membres M, membres MM where M.ip=MM.ip and MM.id != M.id and MM.verif_multi='0' and M.verif_multi='0' order by M.ip