2016-09-19 1 views
-2

Ich erstelle ein System, wo Benutzer (die durch eine Benutzer-ID-Nummer identifiziert werden) über Posts abstimmen können (denke Reddit, StackOverflow, etc).Implementieren von Voting oder "Likes" mit MySQL

Benutzer können einen Beitrag abstimmen oder überhaupt nicht abstimmen.

Die Anzahl der Stimmen für einen bestimmten Beitrag kann leicht in der Tabelle mit den Beiträgen gespeichert werden.

Den Überblick darüber zu behalten, wer gewählt hat, ist jedoch eine ganz andere Aufgabe, die mir nicht ganz klar ist.

Ich dachte, ich könnte eine Tabelle haben, die zwei Spalten hätte: Benutzer-ID und Post-ID.

Wenn sie über einen Beitrag abstimmen, füge ich ihre Benutzer-ID und Post-ID zu dieser Tabelle hinzu. Wenn sie widerrufen, entferne ich diesen Eintrag aus der Tabelle.

Beispiel:

User ID | Post ID 
1  | 3949 
1  | 4093 
2  | 3949 
etc... 

Ist das eine vernünftige Lösung?

+2

"Ist das eine vernünftige Lösung?" Ja. – nogad

Antwort

0

Ja, das ist eine relativ einfache und einfache Lösung für das Problem. Sie können das gleiche für Ihre Kommentare tun (wenn Sie möchten). In Ihrer Tabelle MAIN_POST ordnen Sie eine post_id zu und verwenden diese post_id in anderen Tabellen (Kommentare (post_id, user_id, post_comment, comment_time) und votes (post_id, user_id, vote_status (Sie können 1 für die Abstimmung und 0 für die Abstimmung verwenden))) . Es wird Ihre SQL-Abfragen komplizieren, um Daten zu erhalten, ein wenig, aber Sie können es tun. Und auf der Android-Seite gibt es viele Tricks, um diese Daten in der Anwendung zu behandeln und einzurichten und Sie können diese Abstimmung (liken) und Kommentare Idee wie Facebook machen (SIE für Ihre Kommentare und Likes und NAMES für andere).

0

Die Verwendung einer 'In-Between' oder 'Joining'-Tabelle ist in diesem Fall eine vollkommen akzeptable Lösung. Falls relevant, könnten Sie der Beziehung sogar einen Zeitstempel hinzufügen und dem Benutzer anzeigen, wenn ein Benutzer ein Upvoted durchgeführt hat.

Es ist auch wichtig, auf die richtigen Indizes und Schlüssel zu achten, damit die Tabellenstruktur auch nach dem Wachstum des Datasets ordnungsgemäß funktioniert.

0

Ich würde Zeilen nicht aus der Tabelle entfernen. Ich verstehe, warum Sie das tun wollen, aber warum die Information verlieren? Stattdessen halten eine + 1/-1 Wert für jeden Eintrag und dann die Werte für eine Stelle zusammenzufassen:

select sum(vote) 
from uservotes 
where postid = 1234; 

Und ich mit Rick zu, dass Sie auch das Erstellungsdatum/Zeit enthalten sollte.