Ich arbeite an einer Anwendung, die ähnliche Logik wie SO hat, wenn der Benutzer zuletzt gesehen wurde. Ich bin auf ein konzeptionelles Problem gestoßen, von dem ich hoffe, dass einige von euch Gurus mir helfen können.
Alle Aktivitäten werden in einer ActivityLog-Tabelle in der Datenbank protokolliert
Wenn ein angemeldeter Benutzer die Website besucht und eine neue Sitzung erstellt wird, aktualisiere ich das Aktivitätsprotokoll mit der Benutzer-ID und einigen sehr allgemeinen Informationen. Das gleiche passiert, wenn sie einen neuen Datensatz erstellen, ihr Profil aktualisieren usw.
Das Problem, das ich habe, ist das.
Wenn ich das neueste Aktivitätselement verwende, dann navigiere zu meiner persönlichen Account-Seite, die "Zuletzt gesehen" erscheint als 1 Sekunde, weil ich beim Start der Session GERADE die db treffe ... Das ist nicht gut, weil ich will um zu sehen, was ich "zuletzt" dort war, nicht wenn ich da bin "jetzt".
Wenn ich jedoch Skip(1).Take(1)
verwende, um den zweiten Datensatz in der Datenbank zu erhalten, wenn jemand anderes mein Profil aufruft, während ich mich "nur" angemeldet habe, werden sie sehen, dass ich etwa eine Woche war vor und nicht heute.
Welche Art von Logik würden Sie verwenden, um Ihren Kuchen zu haben und es auch zu essen?
Ich benutze ASP.NET MVC2 und Linq zu SQL, aber ich denke, dass diese Frage mehr sprachunabhängig ist.
Es klingt, als könnten Sie nur den zweitletzten Datensatz für den aktuellen Benutzer anzeigen, und für alle anderen Benutzer den aktuellsten.
Was ich tun würde (um einfach eine große Logikschleife zu vermeiden) wäre, zwei Felder hinzuzufügen. current_seen
und last_seen
. Beim Login verschiebe current_seen
auf last_seen
und setze current_seen
auf den aktuellen Zeitstempel. Zeigen Sie dann last_seen
als "Zuletzt gesehen am XX / XX / XXX" an.
Ein Ort zum Nachschlagen ist der Quellcode von OSQA (das Open-Source-System von q & amp; a) -
Und ja, es sieht StackOverflow sehr ähnlich (um es gelinde auszudrücken).
Tags und Links user-tracking