Ich habe eine MySQL-Tabelle mitMySQL Select User-IDs basierend auf Kontinuierlich Reihen Value & Zustand
- row_id (primär)
- User_id
- user_ip
- DATE_START (Unix-Zeitstempel)
- date_end (Unix Timestamp)
Ich möchte nur die Benutzer-IDs von Diese Tabelle (distinct) IFmindestens 2 kontinuierlich Reihen sind, wo
die user_ip in [row X] mit der user_ip in [Zeile X + 1] unterscheidet
UND
ABS (date_end in [row X] - DATE_START in [Zeile X + 1]) < = 20
Die Zeilen sollten von row_id ASC sortiert werden, damit wir die Zeile X, X + 1 usw. kontinuierlich erhalten können.
Ich habe dies mit PHP leicht gemacht, aber es ist sehr, sehr langsam, also denke ich, dass es mit nur SQL gemacht werden kann.
Beispiel
row_id | user_id | user_ip | date_start | date_end
1 , 1 , 127.0.0.1 , 1469100096 , 1469100099
2 , 2 , 5.5.5.5 , 1469100054 , 1469100055
3 , 3 , 4.4.4.4 , 1469100032 , 1469100036
4 , 1 , 6.6.6.6 , 1469100117 , 1469100099
5 , 4 , 127.0.0.1 , 1469100001 , 1469100005
6 , 2 , 127.0.0.1 , 1469100555 , 1469100565
Daraus sollten wir nur die Benutzer-ID 1, da die Benutzer-ID 1 HAD andere IP in 2 kontinuierlich Reihen + die date_end der ersten Reihe (1469100099) erhalten - das Datum Beginn der nächsten Zeile 1 (469100117) = 18 Das ist = 20.
Wir sollten die Benutzer-ID 2 NICHT zurückgeben, da sie zwar die erste Bedingung validiert, aber die 2. Bedingung mit dem Datum_End und nicht validiert Start Datum.
Blick auf: stackoverflow.com/questions/9824948/... Und versuchen Sie so etwas wie dieses: SELECT parent.id FROM Tabellenname AS Mutter INNER JOIN Tabellenname AS Kind auf parent.user_ip = child.user_ip und DATE_SUB ((parent.date_end -child.date_start), INTERVAL 20 HOUR) und parent.user_id = child.user_id; – Nyranith