Frage

Ich arbeite an einer Anwendung, die in Bezug auf eine ähnliche Logik wie SO hat, wenn der Benutzer zuletzt gesehen wurde. Ich habe in ein konzeptionelles Problem führen, dass ich mit einigen von euch Gurus kann helfen, mich bin der Hoffnung.

Alle Aktivitäten werden in einem ActivityLog Tabelle in der Datenbank

protokolliert

Wenn ein angemeldeter Benutzer trifft die Website und eine neue Sitzung erstellt wird, ich das Aktivitätsprotokoll mit der Benutzer-ID aktualisieren und einigen sehr allgemeinen Informationen. Die gleiche Sache geschieht, wenn sie einen neuen Rekord, aktualisieren ihr Profil zu erstellen, etc.

Das Problem, das ich habe, ist dies.

Wenn ich die aktuellen Aktivitäten Artikel verwenden, wechseln Sie zu meiner persönlichen Account-Seite, die „Zuletzt gesehen“ zeigt sich als 1 Sekunde vor, weil ich gerade die db auf Sitzungsstart getroffen ... Das ist nicht gut, weil ich will um zu sehen, was ich als „letzte“ war da, nicht, wenn ich da bin „jetzt“.

Wenn ich jedoch Skip(1).Take(1) verwenden, um die zweite Datensatz in der Datenbank zu erhalten, dann, wenn jemand anderes sieht mein Profil, während ich habe „nur“ unterzeichnet ... sie werden sehen, dass ich auf eine Woche sagen wurde vor und heute nicht.

Welche Art von Logik würden Sie verwenden, um Ihren Kuchen zu haben und ihn auch essen?

Ich bin mit ASP.NET MVC2 und Linq to SQL, aber ich denke, diese Frage mehr sprachunabhängig ist.

War es hilfreich?

Lösung

Es klingt wie Sie nur den zweitletzten Datensatz für den aktuellen Benutzer zeigen konnte, und für alle anderen Benutzer zeigen die jüngste.

Andere Tipps

Was ich tun würde (einfach eine große Logik Schleife zu vermeiden) würde zwei Felder hinzuzufügen. current_seen und last_seen. Auf Login bewegt current_seen zu last_seen und Satz current_seen das aktuelle timestampe. Anzeige dann last_seen als "Last auf XX gesehen / XX / XXX".

Ein Ort, zu sehen ist auf dem Quellcode zu OSQA (die Open-Source-Frage-Antwort-System) -

http://www.osqa.net/

Und ja, es sieht viel wie Stackoverflow (gelinde gesagt).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top