Anzahl gleicher IPs

daryl

Mitglied
Ich möchte gerne folgendesumsetzen: Aus folgender Tabelle soll mittels MySQL und PHP geprüft werden, ob es mehrmals vorkommende IPs gibt - und wenn das so ist, dann sollen die User angezeigt werden, die diese IP nutzen.

user | IP
1 | 200.167.345.123
2 | 127.0.023.232
3 | 200.167.345.123

Nun soll rauskommen, dass user 1 und 3 die geliche IP genutzt haben.

Vielen Dank im Voraus...
 
Kann man in phpmyadmin nicht irgendwie nen "primary key" setzen sodass gleiche Datensätze (gleiche IP's) erst gar nicht eingetragen werden oder irre ich mich?

MfG
cAm3eel
 
Du kannst mit ORDER BY nach der IP sortieren und in der Abfrage-Schleife in PHP die letzte ausgelesene IP (Zeile in Variable zwischenspeichern) mit der im aktuellen Durchlauf ausgelesenen vergleichen. Stimmen sie überein, gibtst Du beide Zeilen aus.
 
Geht also nicht mit COUNT und GROUP ? Das wäre leichter und performanter - denn wenn ich alle Einträge der DB erst so überprüfen muss, dauert das ja uach ne ganze Weile...
 
daryl hat gesagt.:
Geht also nicht mit COUNT und GROUP ? Das wäre leichter und performanter - denn wenn ich alle Einträge der DB erst so überprüfen muss, dauert das ja uach ne ganze Weile...
Da sehe ich so ad hoc keine Lösung. Evtl. lässt sich über Umwege mit Subselects etwas machen.
Wäre sichergestellt, dass nur 2 User sich eine IP teilen (was natürlich abwegig ist), könntest Du mit Alias-Tabellennamen die Tabelle über die IP mit sich selber joinen.
Vielleicht sind das ja ein paar Anregungen, die Dir bei weiteren Gedankenexperimenten helfen.
GROUB BY alleine halte ich für ungeeignet, da es zwei Zeilen mit derselben IP auf eine Zeile reduziert und Du somit einen User verlierst.
Eine Idee mit Subselect, ich bin mir aber überhaupt nicht sicher, ob die Syntax überhaupt richtig ist:
Code:
SELECT 
t.user, 
t.IP,
(SELECT COUNT(*) FROM Tabelle WHERE IP = t.IP) AS zaehler
FROM Tabelle as t
WHERE zaehler > 1
ORDER BY zaehler DESC, IP
 
Hallo!

Suchst du sowas:
Code:
mysql> select * from ips;
+------+-----------------+
| user | ip              |
+------+-----------------+
|    1 | 200.167.345.123 |
|    3 | 200.167.345.123 |
|    2 | 127.0.023.232   |
|    5 | 127.0.023.232   |
|    4 | 123.13.23.141   |
+------+-----------------+
5 rows in set (0.00 sec)

mysql> select user, ip from ips group by ip having count(ip) > 1;
+------+-----------------+
| user | ip              |
+------+-----------------+
|    2 | 127.0.023.232   |
|    1 | 200.167.345.123 |
+------+-----------------+
2 rows in set (0.00 sec)

Gruß Tom
 
Da er auch die entsprechenden User haben will, möchte ich Thomas Statement mal erweitern:
Code:
SELECT user, ip FROM ips 
WHERE ip IN (SELECT ip FROM ips GROUP BY ip HAVING COUNT(ip) > 1)
 
Hab beide ausprobiert.

select user, ip from ips group by ip having count(ip) > 1;
bringt mir irgendwie immer nur einen User, der doppelt vorkommenden IP. Der 2. fehlt.

SELECT user, ip FROM ips
WHERE ip IN (SELECT ip FROM ips GROUP BY ip HAVING COUNT(ip) > 1)
bringt mir nen SQL-Syntax-Fehler.

Hoffe da gibts ne Lösung...aber trotzde mschon mal danke, das ihr euch so intensiv drum kümmert - aber ich kann mir irgendwie nicht vorstellen, dass ich der erste bin, der so was braucht. Hoffentlich finden wir bald ne Lösung des Problems raus !
 
daryl hat gesagt.:
bringt mir nen SQL-Syntax-Fehler.
Dann schreib den doch mal hin ;) Wie lautet der?
MySQL kann erst ab Version 4.1 Subselects, vielleicht ist Dein MySQL zu alt?
Das IN kannst Du auch mal versuchen, durch ein Gleichheitszeichen zu ersetzen oder andere Varianten von Vergleichen i.V.m. Subselects probieren.

Gruß hpvw
 
Wieso nicht gleich:
Code:
SELECT
        COUNT(*) AS `count`
  FROM
        […]
  GROUP BY
        `ip`
  ORDER BY
        `count` DESC
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück