Frage

Ich arbeite an einer PHP-Anwendung, die mehrere Objekte hat, die kommentiert werden kann. Jeder Kommentar kann abgestimmt werden, mit den Nutzern, um zu ihm in der Lage, +1 oder -1 (wie Digg oder Reddit). Im Moment bin ich planen eine ‚Stimmen‘ Tabelle aufweist, hat trägt user_id und ihre Stimme Informationen, die gut zu funktionieren scheint.

Die Sache ist, hat jedes Objekt Hunderte von Kommentaren, die in einer separaten Kommentar Tabelle gespeichert sind. Nachdem ich die Kommentare zu laden, habe ich die Stimmen tally und dann individuell jede Stimme überprüfen gegen den Benutzer sicherzustellen, dass sie nur einmal abstimmen. Das funktioniert aber nur scheint wirklich Datenbank intensiv -. Viele Abfragen nur für die Kommentare

Gibt es eine einfachere Methode, dies zu tun, die weniger DB intensiv ist? Ist meine aktuelle Datenbankstruktur der beste Weg zu gehen?

Um klarer zu aktueller Datenbankstruktur:

Kommentare Tabelle:

  • User_id
  • object_id
  • total_votes

Abstimmungen Tabelle:

  • comment_id
  • User_id
  • Stimme

Ende Ziel:

  • Der Benutzer darf nur einmal auf jeden Kommentar mit mindestens # von MySQL-Abfragen wählen (jedes Objekt mehr Kommentare)
War es hilfreich?

Lösung

Um sicherzustellen, dass jeder Wähler Stimmen nur einmal, entwerfen sie ihre Stimmen Tabelle mit diesen Feldern-CommentID, UserID, VoteValue. Machen Sie CommentID und UserID den Primärschlüssel, die sicherstellen, dass ein Benutzer nur eine Stimme bekommt. Dann abzufragen, die Stimmen für einen Kommentar, etwas zu tun, wie folgt aus:

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

Ist diese Hilfe?

Andere Tipps

Warum Sie für jeden Kommentar der summierten Stimmen nicht speichern? Erhöhen / Verringern dies, wenn eine neue Abstimmung geschehen ist.

Dann müssen Sie prüfen, ob der Benutzer speziell für diesen Kommentar gestimmt hat nur eine Stimme pro Kommentar pro Benutzer zu ermöglichen.

Sie können eine SQL setzen Bedingung verbinden, die die Stimmen alle auf Kommentare vom aktuellen Benutzer für dieses Objekt gemacht zurückgibt, wenn Sie keine Zeilen zu erhalten, hat der Benutzer nicht gestimmt. Das ist nur geringfügig von Ihnen jeden Kommentar eins nach dem anderen in das Programm zu überprüfen.

so weit wie die Datenbankstruktur betrifft, so scheint diese Dinge trennen zu halten vollkommen logisch. Abstimmung {user_id, object_id, object_type, vote_info ...)

Sie können bereits sein dies zu tun, sorry, aber ich konnte nicht interpretieren, von Ihnen schreiben, wenn das der Fall ist.

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