Ik wil dat een query dubbele ipadressen uit de database haalt.
Als er bij 2 gebruikers hetzelfde ipadres staat, dat dat wordt weergegeven op mijn admin pagina.

Is dit mogelijk? Zoja weet iemand hoe?
Wat heb je al?
Nog niks helaas. Weet niet waar ik moet beginnen :(
voer deze query uit


select ip, count(ip) as counted
from dbname
group by ip
having counted > 1
order by counted;
Bedankt Laurens! Het werkt idd. Alleen nu laat hij maar 1 gebruiker zien. Ik wil als er 2 gebruikers met hetzelfde ip zijn, dat hij ze allebei laat zien.
Ik heb nu:


<? $query = mysql_query("SELECT gebruikersnaam,ip, count(ip) AS COUNTED FROM users GROUP BY ip HAVING COUNTED > 1 ORDER BY COUNTED"); 

	   while($row = mysql_fetch_array($query)){
		echo $row['gebruikersnaam'].'<br>';   
	   }
	?>
Kijk a.u.b naar de code hierboven of hieronder.
Ik weet niet of dat lukt, maar kun je dat niet met foreach doen?
Ik heb het aan de praat gekregen met de volgende code:

<?php

	// Standard variables:
	$TriggerError	= 'Houston, we hava a problem!';

	// Standard database connection:
	require_once('mysqli_connect.inc.php');
	// Define the database variables:
	$Conn		= mysqli_connect(MYSQLI_SERVER, MYSQLI_USERNAME, MYSQLI_PASSWORD, MYSQLI_DATABASENAME) or trigger_error($TriggerError);

	// Select multiply items out of a database:
	$SelectIP	= mysqli_query($Conn, "SELECT username,ip, count(ip) AS COUNTED FROM accounts GROUP BY ip HAVING COUNTED > 1 ORDER BY COUNTED") or trigger_error($TriggerError);
	
	// Kijken hoeveel rijen er zijn:
	if(mysqli_num_rows($SelectIP) >= 1) {
	
	// Meerdere gevonden, dus van 1 de gegevens splitsen en de andere selecteren:
	while($Row = mysqli_fetch_array($SelectIP)) {
		$SelectMultiply	= mysqli_query($Conn, "SELECT username,ip FROM accounts WHERE ip = '".$Row['ip']."'") or trigger_error($TriggerError); }
	
	// Nu de andere met een foreach lus tonen:
	foreach($SelectMultiply as $Seperated) {
		while($Row = mysqli_fetch_array($SelectMultiply)) {
			echo $Row['username'].'<br />';
			echo $Row['ip'].'<br />'; } } }
?>

Ik weet niet of dit een goede manier is.
Je kan het volledig in sql oplossen met een subquery.

SELECT gebruikersnaam,ip
FROM users a
WHERE EXISTS (
SELECT count(b.ip) as counted
FROM users b
WHERE a.ip = b.ip
group by b.ip
having counted > 1)
;
Hartstikke bedankt Aad B! Het werkt :)
Aaron, dat kan inderdaad een alternatieve oplossing zijn, maar als er een groot database is dan duurt het veel langer dan nodig is. ook kost het meer bandwidth tussen mysql en apache. en natuurlijk dat betekend dat de server load en geheugen gebruik onnodig hoog word terwijl alles binnen MySQL kan gebeuren.

@laurens dragicevic Inderdaad, klopt helemaal. Zoek altijd uit of je het volledig in sql kan oplossen (en dat kan heel vaak). Het processen van hele bakken data in foreach loopjes is killing voor de performance van je website. Helaas wordt het door gebrek aan diepgaande sql kennis enorm veel gedaan, data ophalen, loopjes, weer data ophalen etc etc. Lijkt dus op cobol techniek uit de jaren 80....
Daarom stond er ook dat ik het niet zeker wist of het een goede oplossing is en het is waar, ik ken nog niet zo heel veel van SQL query's en dergelijke, maar het begint te lukken, dankzij mensen zoals jullie! En bedankt voor de uitgebreide uitleg. Heb m'n post wat aangepast!

Heb de code van jullie ook vlug opgeslagen in een bestandje, ga het later eens uit elkaar halen en het ook zeker gebruiken!

Merci

Reageren