with - php pdo mysql w3schools




Bewertungssystem in PHP und MySQL (2)

Eine neue Tabelle:

Artikel-ID | Benutzer-ID | Bewertung

Wo die Artikel-ID und die Benutzer-ID den zusammengesetzten Schlüssel bilden, würde die Bewertung 1 sein, was Aufwärtsvoten anzeigt, -1 für einen Downvote und 0 für eine entfernte Stimme (oder einfach die Zeile entfernen).

Wenn wir uns die stackoverflow Webseite ansehen, haben wir Stimmen. Aber die Frage ist, was ist der beste Weg zu speichern, wer gewählt hat und wer nicht. Lasst uns das auch noch vereinfachen und sagen, dass wir nur Up wählen können, und wir können nur die Up-Abstimmung entfernen.

Ich dachte daran, den Tisch in einer solchen Form zu haben

question - Id(INT) | userId(INT) | title(TEXT) | vote(INT) | ratedBy(TEXT)

Der Rest ist selbst erklärend, aber ratedBy ist ein Comma Seperated Id Werte der Benutzer.

Ich dachte daran, die ratedBy zu lesen und sie mit der userId des aktuell angemeldeten Benutzers zu vergleichen. Wenn er in der bewerteten Person vorhanden ist, kann er abstimmen, andernfalls kann er seine Stimme entfernen. Das wiederum wird den Wert von ratedBy entfernen


Ich denke, um einen anderen Tisch "Abstimmung" ist besser. Die Beziehung zwischen Benutzern und Stimmen ist n zu n, daher sollte eine neue Tabelle erstellt werden. Es sollte so etwas sein:

question id (int) | user id (int) | permanent (bool) | timestamp (datetime)

Das permanente Feld kann verwendet werden, damit die Stimmen nach einer bestimmten Zeit bleiben, wie dies bei SO der Fall ist.
Andere Felder können entsprechend den gewünschten Merkmalen hinzugefügt werden. Da jede Zeile mindestens 16B benötigt, können Sie bis zu 250 Millionen Zeilen in der Tabelle haben, bevor die Tabelle 4GB verwendet (Fat32-Limit, wenn es ein Archiv pro Tabelle gibt, was bei MyISAM und InnoDB der Fall ist).
Auch, wie Matthew Scharley in einem Kommentar darauf hinweist, laden Sie nicht alle Stimmen gleichzeitig in den Speicher (wie das Holen der gesamten Tabelle in einer Ergebnismenge). Sie können die LIMIT-Klausel immer verwenden, um die Abfrageergebnisse einzuschränken.





architecture