MySQL Analyseproblem

TDS

Webbie u. Progger
ID: 36770
L
25 April 2006
1.473
61
Hallo,

ich hab ein Problem :ugly:
Und zwar habe ich eine Tabelle:
int id (primary, auto_increment)
int user_id
bigint ip
timestamp time


Nun möchte ich gern alle Datensätze haben die innerhalb von 30 Minuten (time) die gleiche IP-Adresse (ip) aber unterschiedliche User-ID (user_id) haben. Ich habe es mit Sub-Selects probiert - ohne Erfolg. Dann habe ich mit join angefangen, bloß irgendwie geht das bei mir nicht auf nur eine Tabelle bezogen.

Kann mir jemand weiterhelfen :?:

Aktueller Stand (ich weiß, nur Quark):
PHP:
$db_order  = '
    SELECT A.user_id, B.user_id, A.ip, B.ip, A.time, B.time FROM
    '.$portal_config['db']['tables']['log_points'].' as A LEFT JOIN '.$portal_config['db']['tables']['log_points'].' AS B
    ON A.ip = B.ip AND A.user_id != B.user_id
    HAVING DATE_SUB(A.time, INTERVAL 60 SECONDS) > 0  
    GROUP BY A.ip
    LIMIT 10
';
 
funktioniert bei MySql sowas ? :

SELECT ip
FROM deiner-tabelle
WHERE zeit > current_timestamp - 30 Minutes
GROUP BY ip
HAVING count(distinct( USER_ID )) > 1
 
funktioniert bei MySql sowas ? :

SELECT ip
FROM deiner-tabelle
WHERE zeit > current_timestamp - 30 Minutes
GROUP BY ip
HAVING count(distinct( USER_ID )) > 1

Ne, funktioniert nicht. Das geht ja bloß für die letzten 30 Minuten. Ich möchte ja das alles ausgegeben wird, wo innerhalb von 30min die IP doppelt genutzt wurde (Fake Check).
Here die MySQL Query mal umgeschrieben:
Code:
SELECT ip FROM portal_log_points WHERE time > DATE_SUB(NOW(), INTERVAL 30 MINUTE) GROUP BY ip HAVING count(distinct(user_id)) > 1
 
Okay, aktuell bin ich (mit Hilfe eines anderen Forums) soweit:

SELECT A.user_id AS id1, B.user_id AS id2, A.ip AS ip1, B.ip AS ip2, A.time AS time1, B.time AS time2
FROM portal_log_points AS A
INNER JOIN portal_log_points AS B ON A.ip = B.ip
AND A.user_id <> B.user_id
AND DATE_ADD( A.time, INTERVAL 30
MINUTE ) > B.time
AND A.time < B.time
LIMIT 10

Aber da bekommt z.B. 1 User gleich 3 User mit gleicher IP zugewiesen. Und einer dieser drei bin ich - kann also nicht sein da ich auch nicht bei AOL bin und so etwas wie IP-Sharing mache.
 
oh, pardon. Ich hatte das "innerhalb von 30 Minuten" als "innerhalb der letzten 30 Minuten" interpretiert.

Die von Dir gepostete Query sollte schon funktionieren.
Hast Du mal überprüft, ob Deine ID mit einer AOL-IP in der Tabelle portal_log_points drinsteht ?

Vielleicht ist ja diese Query ok, aber die Query, die die Tabelle befüllt, fehlerhaft.

In der SELECT-Klausel ist
... A.ip AS ip1, B.ip AS ip2 ...
übrigens redundant, weil A.ip und B.ip identisch sein müssen.
 
Also ich habe ja selber die ID 1, und ich bin nicht bei AOL sondern bei 1und1. Insofern kann auch jemand von AOL nicht in den IP-Bereich von 1und1 rutschen. Wäre sonst sehr komisch.
Die Redundanz habe ich mal rausgenommen.