zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Mysql: User sollen Lieder Bewerten, wie sieht effektive Speicherung und Anzeige aus?

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 02.03.2007, 01:40
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard Mysql: User sollen Lieder Bewerten, wie sieht effektive Speicherung und Anzeige aus?

Hi,
mein Problem ist folgendes, ich will für eine Webseite über Musik eine Möglichkeit schaffen das die User Alben oder Songs Bewerten können. Diese Bewertung wird dann neben den entsprechenden Objekten angezeit (auf der Detailseite zum Album und, und das ist sicherlich wichtig, in Ablum und Songlisten direkt neben dem Ablum oder Lied). Bisher gibt es schon eine Bewertung diese wurde aber beim einfügen des Objektes eingegeben und ist statisch. Nun soll es so laufen das die Bewertung des Ablums durch die User gemacht werden, es soll also immer die Durchschnitsbewertung gebilded werden und diese wird dann angezeigt. Technisch ist das kein Problem, meine Frage zielt darauf ab, wie das möglichst effektiv gelöst wird es könnten ja Tausende Nutzer das Objekt bewerben und speziell in Listen stelle ich es mir ziemlich rechenintesiev vor.

Zur Struktur: Es gibt eine My-Sql Datenbank und dort eine Tabelle für die Objekte (z.b. Alben oder Lieder) bisher gibt es eine Spalte für die Adminbewertung. Meine Ideen sind folgende:

1. Einfach nur eine Zusatzliche Tabelle erstellen in welcher dann die User-ID des Bewertenden Users abgelegt ist (jeder User darf pro Objekt nur einmal Voten) dann die Objekt-ID und die Bewertung.
- bei der Anzeige der Bewertung würden dann jedesmal alle Einträge mit der entsprechenden Objekt-ID in einen Array geladen (ohne auf die mögliche Größe Rücksicht zu nehmen) dann wird daraus mit einer For-Schleife der Durchschnitt gebildet und dann angezeigt.
-Nachteil jedesmal müsste ein möglicherweise großer My-Sql Query abgesetzt werden und dann müsste auch jedesmal der Durchschnit berechnet werden.

2. Wie oben nur das ich zusatzlich nach jeder Bewertung zwei Spalten der Objekt-Tabelle Update nämlich zum einen eine Spalte welche die Summe der Bewertungen (zahlen von 1-10 z.b.) speichere und in einer zweiten Spalten die Anzahl der Bewertungen.
- es müsste dann nicht jedesmal eine umständliche und langwierige Tabellenabfrage stattfinden sondern nur eine Division zweier Zahlen durchgeführt werden.
Die Extra - Bewertungstabelle ist aber trotzdem nötig weil die Information welcher Benutzer wie gevotet hat wichtig ist. Um zu verhindert das jemand mehrmals voted und um ihm seine eigene Bewertung anzeigen und revidieren zu lassen.
- Nachteil ist das ich darauf angewiesen bin das die Beiden Tabellen auch immer Synchron sind, dürfte eigentlich der Fall sein, aber man weiß ja nie was dazwischen kommen kann.

Welche Methode haltet ihr für die beste? Oder gibt es noch eine bessere Möglichkeit?
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 02.03.2007, 10:18
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von braindead Beitrag anzeigen
1. Einfach nur eine Zusatzliche Tabelle erstellen in welcher dann die User-ID des Bewertenden Users abgelegt ist (jeder User darf pro Objekt nur einmal Voten) dann die Objekt-ID und die Bewertung.
- bei der Anzeige der Bewertung würden dann jedesmal alle Einträge mit der entsprechenden Objekt-ID in einen Array geladen (ohne auf die mögliche Größe Rücksicht zu nehmen) dann wird daraus mit einer For-Schleife der Durchschnitt gebildet und dann angezeigt.
Das geht auch alleine mit SQL:
Code:
SELECT AVG(rating) FROM user_rating WHERE uid=nn
Zitat:
Zitat von braindead Beitrag anzeigen
-Nachteil jedesmal müsste ein möglicherweise großer My-Sql Query abgesetzt werden und dann müsste auch jedesmal der Durchschnit berechnet werden.
Das stört eine Datenbank nicht. Wichtig ist nur, dass auf die User_ID ein Index gesetzt ist.

Zitat:
Zitat von braindead Beitrag anzeigen
Welche Methode haltet ihr für die beste? Oder gibt es noch eine bessere Möglichkeit?
Variante 1.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 02.03.2007, 12:47
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Hmm die erste Variante wäre mir im prinzip auch lieber, nur habe ich etwas sorgen wegen der möglicherweise zu Langenladezeit. Es könnte ja sein das Einhunderttausend User für das Objekt gevotet haben. und dann werden auch noch auf der Seite, sagen wir mal 100 Objekte gleichzeitig angezeigt nebst bewertung.

Aber nochmal eine Frage zum Index, ich hätte jetzt einen Doppel, Primary Key auf die Spalten User_ID und Objekt_ID gelegt, reicht das nicht aus?
Mit Zitat antworten
  #4 (permalink)  
Alt 02.03.2007, 13:48
Benutzerbild von netspy
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 13.08.2004
Ort: Leipzig
Beiträge: 1.956
netspy sorgt für eine eindrucksvolle Atmosphärenetspy sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von braindead Beitrag anzeigen
Hmm die erste Variante wäre mir im prinzip auch lieber, nur habe ich etwas sorgen wegen der möglicherweise zu Langenladezeit. Es könnte ja sein das Einhunderttausend User für das Objekt gevotet haben. und dann werden auch noch auf der Seite, sagen wir mal 100 Objekte gleichzeitig angezeigt nebst bewertung.
Selbst wenn es doch mal solche großen Datenmengen werden, ist es dann ja auch kein Problem, eine extra Spalte für die Songs und Alben hinzuzufügen und dort die durchschnittliche Bewertung zwischenzuspeichern. Das würde ich aber erst machen, wenn es wirklich Probleme mit der Performance geben sollte.

Zitat:
Zitat von braindead Beitrag anzeigen
Aber nochmal eine Frage zum Index, ich hätte jetzt einen Doppel, Primary Key auf die Spalten User_ID und Objekt_ID gelegt, reicht das nicht aus?
Sollte passen.

Mario
__________________
AppDev Blog · AppDev Forum
Mit Zitat antworten
  #5 (permalink)  
Alt 02.03.2007, 15:20
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard

Ok, ich mache das dann erstmal so, und füge später, wenn nötig zusätzliche spalten hinzu.
Danke für die hilfreichen Antworten.
Mit Zitat antworten
  #6 (permalink)  
Alt 10.03.2007, 11:10
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.810
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

Ich weiß ja nicht ob es noch benötigt wird...
Aber hier gibts ein tutorial für umfragen und das is denk ich etwas was dich interresieren dürfte
#php/QuakeNet Tutorial - Eigenes Pollscript
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus



Alle Zeitangaben in WEZ +2. Es ist jetzt 04:09 Uhr.