Hi Leute,
ich habe folgendes Problem: in einer Tabelle "activities" speichere ich für jeden angemeldeten Benutzer seine Session + User-ID + letzte Aktivität. Nun möchte ich mir eine Liste ausgeben lassen, wer gerade aktiv ist. Das Problem ist nur, dass wenn sich ein User einloggt, dann seine Session nicht per Logout sondern über Schließen des Browserfensters beendet und sich dann binnen einiger Minuten nochmal einloggt, wird er von meinem Script so gesehen, als wäre er 2x eingeloggt, weil beide "letzte Aktivitäten" innerhalb des von mir festgelegten Timeouts von 10 Minuten liegen.
Gebe ich mir nun alle Aktivitäten der letzten 10 Minuten aus, erhalten ich den Benutzer, der sich 2x hintereinander eingeloggt hat, 2x angezeigt. Nun zum Problem: dem möchte ich per GROUP BY user_id entgegen wirken, jedoch erhalte ich dann immer den ältesten Datensatz und nicht den aktuellsten. Eine Kombination mit ORDER BY last_activity ändert an diesem Problem nichts.
Wie kann ich GROUP BY so einsetzen, dass ich jeden Benutzer nur 1x angezeigt bekomme und dann nur den neusten Datensatz?
Struktur + Beispieleinträge
activity_id | user_id | session_id | last_activity
---------------------------------------------
1 | 1 | id1 | timestamp1 (id1 und timestamp sind hier nur angedeutet)
2 | 5 | id2 | timestamp2
3 | 7 | id3 | timestamp3
4 | 5 | id4 | timestamp4 (neuester Eintrag)
>> group ich nun by user_id, erhalte ich als letzte Aktivität des Users "5" timestamp2 und nicht den neueren timestamp4. Hoffe ich konnte das gut erklären...
Danke, Skalu
ich habe folgendes Problem: in einer Tabelle "activities" speichere ich für jeden angemeldeten Benutzer seine Session + User-ID + letzte Aktivität. Nun möchte ich mir eine Liste ausgeben lassen, wer gerade aktiv ist. Das Problem ist nur, dass wenn sich ein User einloggt, dann seine Session nicht per Logout sondern über Schließen des Browserfensters beendet und sich dann binnen einiger Minuten nochmal einloggt, wird er von meinem Script so gesehen, als wäre er 2x eingeloggt, weil beide "letzte Aktivitäten" innerhalb des von mir festgelegten Timeouts von 10 Minuten liegen.
Gebe ich mir nun alle Aktivitäten der letzten 10 Minuten aus, erhalten ich den Benutzer, der sich 2x hintereinander eingeloggt hat, 2x angezeigt. Nun zum Problem: dem möchte ich per GROUP BY user_id entgegen wirken, jedoch erhalte ich dann immer den ältesten Datensatz und nicht den aktuellsten. Eine Kombination mit ORDER BY last_activity ändert an diesem Problem nichts.
Wie kann ich GROUP BY so einsetzen, dass ich jeden Benutzer nur 1x angezeigt bekomme und dann nur den neusten Datensatz?
Struktur + Beispieleinträge
activity_id | user_id | session_id | last_activity
---------------------------------------------
1 | 1 | id1 | timestamp1 (id1 und timestamp sind hier nur angedeutet)
2 | 5 | id2 | timestamp2
3 | 7 | id3 | timestamp3
4 | 5 | id4 | timestamp4 (neuester Eintrag)
>> group ich nun by user_id, erhalte ich als letzte Aktivität des Users "5" timestamp2 und nicht den neueren timestamp4. Hoffe ich konnte das gut erklären...
Danke, Skalu
Kommentar