Videokommentare nachladen

Tommy57

Erfahrenes Mitglied
Hallo,

ich möchte gerne aus einer MySQL Tabelle Videokommentare auf einer Webseite nachladen. Die Kommentare sind nach Wichtigkeit sortiert, was heißt, dass Likes und Antworten auf Kommentare gezählt werden und danach sortiert sind.

Wenn ich nun Kommentare nachlade, möchte ich nur die nachladen, die der User noch nicht gesehen hatte. Das ist etwas schwierig, da sich die Sortierung schnell ändern kann, wenn mehrere User aktiv sind.

Mir gehen da aktuell die Ideen etwas aus. Kennt jemand da vielleicht eine Taktik, wie man sowas geschickt lösen könnte? MySQL Version ist 5.5.

Gruß, Tommy
 
Hi

geht es darum,
a) dass zB. schon 10 Kommentare angezeigt werden, und du willst eben die
"nächsten" 10 holen, in der selben Sortierung wie die schon angezeigten
oder b) dass pro Nutzer wirklich dauerhaft mitgespeichert werden soll,
was schon gelesen wurde?
 
Hi sheel,

also im Prinzip a. Wenn er die nächsten 10 holt, soll er die bereits angezeigten nur nicht mehr sehen. Wäre ja denkbar, dass durch eine Useraktivität Platz 10 und 11 ihre Plätze tauschen. Dann will ich, dass der User die Nr. 10 und dann die 12, 13 usw sieht.

Ich hatte mir überlegt, in der Session die bereits angezeigten abzulegen und dann mit einem "WHERE id NOT IN (...)" alle zu holen. Aber ich bin mir unsicher, ob das wirklich so clever ist.
 
Im Prinzip könnte man auch sagen, ich hätte nen ORDER BY random und will aber nur Ergebnisse anzeigen, die der User noch nicht sieht. Kann ja sein, dass der User über mehrere Stunden hinweg hunderte Kommentare nachlädt.
 
Eine Lösung, die sehr kurz und vom Prinzip her sehr effizient ist, wirds leider nicht geben.
(Wirklich Random wäre noch etwas schlimmer ... egal)

Andererseits sind "hunderte" Kommentare für heutige Computer nichts Weltbewegendes.
Es würde in der Größenordnung nicht sehr weh tun, dem Server bei jeder Nachladung
einfach alle schon erhaltenen Kommentar-IDs mitzuschicken und ihn diese rausfiltern zu lassen,
und bei zB. 1000 angezeigten Kommentaren eine Grenze einzubauen, ab der nichts mehr geliefert wird.
Also
a) JS speichert eine Liste der Beitrags-IDs mit und schickt die beim Nachladen an den Server
b) Server sortiert die Liste nach Beitrags-ID (nicht Likes)
c) Server fragt die (Listenanzahl+10) am meisten gelikten Beiträge aus der DB ab.
d) Das DB-Ergebnis wird auch nach Beitrags-ID sortiert
e) Linear durch beide Listen durchgehen und Beitrags-IDs, die in beiden sind, löschen
f) Rest vom DB-Ergebnis wieder nach Likes sortieren
g) Wenn dieser Rest noch mehr als 10 Einträge hat, die unbeliebteren weg, dmaits genau 10 sind
h) Zurükschicken und JS das anzeigen/einfügen lassen.

Falls man trotzdem ein Verfahren machen will, das auch mit Milliarden Kommentaren
zurechtkommen würde (langsam, aber zumindest nicht unnötig langsam):
Können die Likes auch wieder weniger werden?
Wenn nein:
a) Das Nachladen von Kommentaren, die unbeliebter als der
unbeliebteste derzeit erhaltene Kommentar sind, ist trivial.
b) Für die Anderen, die seit dem letzten Nachladen aufgestiegen sind und rein von den Likes her "zwischen" die schon angezeigten Kommentare gehören würden: JS fragt PHP: Hat der beliebteste Kommentar ID IX und X Likes und der 1007-beliebteste ID IY und Y Likes? (falls JS gerade 1007 Kommentar lokal hat, die anderen Werte auch anhand der lokalen Daten)
c) Wenn PHP "ja" antwortet, anhand einer DB-Abfrage (ohne die vollen Daten mitzuliefern), dann hat sich da nichts geändert, nichts aus dem bereich zum Nachladen. Wenn Nein: Das slebe einmal für die bessere und einmal für die schlechtere Hälfte der lokalen Beiträge wiederholen. usw.usw., wie eine binäre Suche. Wenn man dann bis auf die zB. 100-Kommentar-Blöcke runter ist, für die "Nein" geantwortet wurde, kann man die voll aus der DB nehmen und eben normal durchprüfen was man schon hat und was nicht.
 
Zuletzt bearbeitet:
Hi sheel, danke für die ausführliche Antwort. Ich hatte an etwas ähnliches gedacht. Meine Idee war einfach jede ID in einer Sessin Variable zu ergänzen und später einfach nur zu sagen WHERE id NOT IN (...) und dort mittel implode(',', $allIds) die bereits angezeigten IDs rauszufiltern. Meine Bedenken waren nur, wenn ein User da 10.000 Kommentare nachlädt oder vllt ein Bot oder so. Keine Ahnung, wie das dem Server gefällt.
Das begrenzen auf 1.000 Ergebnisse finde ich wirklich sehr interessant. Bei Sortierung nach Top-Kommentaren eine gute Idee. Die Sortierung nach Datum ist simpel und da kann man dann ja auch alle anzeigen. Vielen Dank. Das hilft mir schon weiter.

Falls wer noch ne andere Idee hat, immer gern her damit. Ansonsten bin ich mit dem aktuellen Stand schon sehr zufrieden.

Gruß, Tommy
 

Neue Beiträge

Zurück