Double boucle problématique...

Petit nouveau ! | 2 Messages

26 juin 2007, 18:51

Salut !

Alors voici mon code :
<?
$sql = mysql_query("SELECT * FROM verif");
$ip1 = mysql_num_rows($sql);

if ($ip1 == 0)
{
echo "Il n'y a eu aucune adresse IP identique détectée pour le moment.";
}

else
{
	while ($b = mysql_fetch_array($sql))
	{
	$sql1 = mysql_query("SELECT * FROM verif WHERE ip='".$b['ip']."'");
	echo '<div id="invitations"><table class="invitations" cellpadding="0" cellspacing="0" width="100%" align="center">  <tr>
	<td width="25%"><strong>IP</strong></td>
	<td width="25%"><strong>ID membre</strong></td>
	<td width="50%"><strong>Adresse e-mail</strong></td>
	</tr>';
		while ($c = mysql_fetch_array($sql1))
		{
		?>
		<tr>
		<td><? echo $c['ip']; ?></td>
		<td><? echo $c['id']; ?></td>
		<td><? echo $c['email']; ?></td>
		</tr>
		<?
		}
	echo '</table></div><br />';
	}
}
?>
Et voilà ce que ça me donne :
Image

Donc comme vous pouvez le voir en fait c'est la 1ere boucle qui pose problème puisqu'elle affiche autant de fois le tableau qu'il y a l'adresse IP dans la table... J'arrive pas à faire en sorte que ça ne se limite qu'à un seul tableau par IP.

Merci de votre aide. :)
Modifié en dernier par Thomasims le 26 juin 2007, 19:26, modifié 2 fois.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

26 juin 2007, 19:06

Si tu souhaites récupérer les valeurs uniques de la colonne "ip" SQL t'offres le mot-clé DISTINCT:

Code : Tout sélectionner

SELECT DISTINCT ip FROM verif
Au passage, je te recommande très fortement d'utiliser les balises <?php plutôt que la version courte <? qui peut ne pas être supportée d'un hébergeur à un autre. Également, utilise mysql_fetch_assoc() plutôt que mysql_fetch_array(), inutile de faire 2 fois le boulot pour rien.

Finalement, si tout ce que tu cherches sont les doublons, tu peux le faire entièrement en SQL grâce à une réquête telle que:

Code : Tout sélectionner

SELECT ip, GROUP_CONCAT(id) AS id, GROUP_CONCAT(email) AS email, COUNT(*) AS cnt FROM verif GROUP BY ip HAVING cnt > 1
En gros elle retournera la liste des "id" et "email" de tout valeur "ip" trouvée en plus de 1 exemplaire. Ce n'est pas la forme la plus performante mais c'est la plus simple, et ça devrait convenir à tes besoins.

Petit nouveau ! | 2 Messages

26 juin 2007, 19:10

C'est parfait ! Merci !

(pour le <? : mauvaise habitude que j'arrive pas à perdre... Promis, je ferrai des efforts ! :P)