SELECT gleicher Spalteninhalte > 1 mal vorhanden

Read

Grünschnabel
Hi,

ich hab ein kleines Problem. Das vorhandene Szenario: Ich möchte in meiner Tabelle "members" das Feld "lastip" auf doppelte IP Einträge prüfen. Und sowohl id, als auch lastip auslesen lassen und in ein Array speichern. Bisher hab ich erfolglos folgenden Code zusammen bekommen, welcher mir mit einem foreach leider nur die ID und IP des zweiten von zwei Einträgen mit der selben IP ausgibt, da auch nur ein Datensatz aus der Datenbank ausgelesen wird.

PHP:
$sql_cuip = $db->Query("SELECT id,lastip FROM " . prefix_nexmin . "members GROUP BY lastip HAVING count(*) > 1");
	
	$num = $sql_cuip->numrows();
	$count_numip = $num;
	
	$cuip_array = array();
	 
	while ($row = $sql_cuip->fetchrow()) {
        array_push($cuip_array,array(
			    'id' => $row->id,
                'lastip' => $row->lastip ) 
		); 
	}


Ich bedanke mich schonmal im Voraus für die Hilfe =)


lG Read
 
Hallo Read,

spontan fallen mir da zwei Möglichkeiten ein:
Code:
sqlite> SELECT id, lastip FROM members;
1|1.2.3.4
2|1.2.3.4
3|5.6.7.8
4|9.0.1.2
5|3.4.5.6
6|3.4.5.6
7|3.4.5.6
sqlite> SELECT GROUP_CONCAT(id), lastip FROM members GROUP BY lastip HAVING COUNT(*) > 1;
1,2|1.2.3.4
5,6,7|3.4.5.6
Code:
sqlite> SELECT id, lastip FROM members m1 WHERE
   ...>   (SELECT COUNT(*) FROM members m2 WHERE m2.lastip = m1.lastip) > 1;
1|1.2.3.4
2|1.2.3.4
5|3.4.5.6
6|3.4.5.6
7|3.4.5.6
Beide Ausgabeformate haben ihre Vor- und Nachteile, wobei das erste für die Weiterverarbeitung in PHP vielleicht handlicher ist. Wie GROUP_CONCAT bei anderen SQL-Dialekten heißt müsstest du selber nachschlagen oder uns verraten, welches RDBMS du verwendest.

Grüße, Matthias
 
Ah. Super Matthias =) Ich dank dir recht herzlich.

Der zweite Lösungsvorschlag ist genau der, den ich gebraucht habe. Ich hab nach tausenden Google Ergebnissen irgendwann selbst nicht mehr durchgesehen.

Diesen Lösungsweg habe ich ebenfalls in Erwägung gezogen, jedoch lag dort bei mir der Fehler bei "SELECT COUNT(*)". Warum auch immer, hab ich dort nochmal die Spalte lastip auslesen wollen =)


Danke nochmal =)


lG Read
 
Zurück