Hallo,

Ik ben hier een best ingewikkeld script aan het maken (denk ik, want ik kom er niet uit :P) Het is een script om te kijken of er meerdere gebruikers op hetzelfde IP in de databse staan, dus eigenlijk meerdere accounts op één IP. Met het volgende script check ik dit na:

<?php
$query0 = "SELECT * FROM `leden`";
$selecteren = mysql_query($query0) or die ( mysql_error( ) );
while ($lijst = mysql_fetch_object($selecteren)) {

$query01 = "SELECT * FROM `leden` WHERE `ip` = '".$lijst->ip."'";
$selecter = mysql_query($query01) or die ( mysql_error( ) );

if (mysql_num_rows($selecter) != 1) {
while ($kat = mysql_fetch_object($selecter)) {
echo $kat->username." -ip- <b>".$lijst->ip."</b><br><br>";

}
echo "<hr>";
}
}
?>

In princiepe werkt dit goed. Ik krijg keurig een lijst met gebruikers die met dezelfde IP's in de lijst staan. Als voorbeeld krijg ik het volgende:

Piet -ip- 86.212.293.219

Peter -ip- 86.212.293.219

Pieter -ip- 86.212.293.219
--------------------------------------------
--------------------------------------------
Jan -ip- 96.272.222.211

Janus -ip- 96.272.222.211

Job -ip- 96.272.222.211

Die informatie klopt. Alleen, nu heb ik als probleem, dat elk rijtje 3 keer voorkomt, omdat hij na het IP van Jan gecheckt te hebben, ook het ip van Janus checkt, en dan zegt hij weer dat ze alledrie hetzelfde IP hebben. Dat klopt ook wel, maar dat wil ik niet :P.

Ik wil dat hij de gebruikers die al gecheckt zijn, niet nog eens gecheck worden. Kan dit door bijvoorbeeld een array te maken en daarnaa met een if te kijken of hij erin staat o.i.d?

Bedankt alvast, SAplayer
SELECT ip, COUNT(username) AS aantal
FROM leden
group by ip
order by ip

geeft het aantal users per ip
Met die query van Jan, heb je dus slechts 1 query nodig om in 1 keer alle informatie op te halen. En dus niet per user een query.

Tip: Gebruik in je queries nooit backtics `, die zijn echt niet nodig. Andere databases accepteren deze niet, je leert jezelf een SQL-dialect aan waar deze databases niet mee kunnen werken.
@Frank: wat zou jij doen, als je ook nog alle namen eruit wilt laten rollen? Ik zou denk ik gewoon:

SELECT ip, username
FROM leden
ORDER BY ip ASC, username ASC

doen en dan in de while zoiets:
<?php
$vorige_ip = '';
while ($row = mysql_fetch_assoc ($res)) {
if ($vorige != $row['ip']) {
// ip echoën
$vorige_ip = $row['ip'];
}
// naam echoën
}
?>
zodat je per ip nummer keurig een of meer usernames eronder krijgt.
Ik snap het niet :s Ik heb het volgende gemaakt:

<?php
$query0 = "SELECT ip, username FROM leden ORDER BY ip ASC, username ASC";
$selecteren = mysql_query($query0) or die ( mysql_error( ) );
while ($lijst = mysql_fetch_object($selecteren)) {

$query01 = "SELECT * FROM `leden` WHERE `ip` = '".$lijst->ip."'";
$selecter = mysql_query($query01) or die ( mysql_error( ) );

$vorige_ip = '';
while ($row = mysql_fetch_assoc ($selecter)) {
if ($vorige != $row['ip']) {
echo $row['ip']."<br>";
$vorige_ip = $row['ip'];
}
echo $row['username'];
}
}
?>

Dan komen de gebruikersnamen wel keurig onder elkaar te staan, maar ze komen er nogsteeds 2 of meer keer in voor :s
In mijn voorbeeld ga ik er van uit dat elke gebruikersnaam maar 1 keer voorkomt in je db. Is dat ook zo?
ja, dat is ook zo, maar als hij een ip tegenkomt, wat er meerdere keren instaat, laat hij zien welke gebruikers dat IP hebben, maar dan laat hij ze dus meerdere keren zien, want hij ziet dat Jan hetzelfde IP heeft als Janus, en hij ziet dat Janus hetzelfde IP heeft als Jan, dus laat hij het 2x zien, terwijl ik het maar 1x wil zien..
Ik heb een manier gevonden, door middel van een array:s

<?php
$arr = array("a", "b"); //de a en b als opvulling, weet niet of hij een lege array pakt
?>

en dan elke keer als hij een gebruikersnaam tegenkomt:

<?php
array_push($arr, $lijst->username);
?>

Hiermee werkt het ;)

Reageren