Bewertungssystem

Le_ruse

Grünschnabel
Ich habe ein Problem, dass ich alleine nicht in den Griff bekomme: ein Bewertungssystem. Dies soll wie folgt funktionieren:

Ich biete auf meiner Seite Links zu verschiedenen Seiten an. Unter jeder Beschreibung der Seite soll nun ein Link zu einem Vote z.B. mit den Schulnoten von 1-6 erscheinen („Diese Seite bewerten.“). Danach sollte sich ein spezielles Pop-Up öffnen, welches das Vote enthält. Hier braucht der User nur einmal auf die entsprechende Note klicken und das Ganze via Button zu bestätigen. Hier erscheint nun der Mittelwert aller Bewertungen und nach 10 Sekunden schließt sich das kleine Fenster wieder.

Bis dahin ginge es ja noch, wenn ich nicht noch höhere Ansprüche an dieses System hätte: Denn der Wert soll gespeichert und das Ganze in die durchschnittliche Bewertung umgewandelt werden. Nun möchte ich unter dem Menüpunkt „Top 10“ die zehn besten Seiten gelistet haben. Dieses soll in drei Spalten einer Tabelle aufgeteilt sein: Platz | Seite (mit Hyperlink zur Beschreibung) | durchschnittliche Bewertung.

Natürlich soll die beste Seite ganz oben stehen und die schlechteste der 10 ganz unten. Wenn nun eine andere Seite besser bewertet wird, als eine andere, soll sich das Ranking in Echtzeit verändern, bzw. die neue Seite sich in die Top 10 eingliedern und die schlechteste Seite nicht mehr dort aufgelistet sein.

Zu alledem soll das Vote auch noch eine IP-Sperre besitzen.

Ich weiß leider nicht, ob PHP die richtige Sprache für so ein Script ist, jedoch war mir keine andere bekannt, die so etwas leisten könnte. Sollte es geeignetere Sprachen geben, so postet die Antworten bitte trotzdem :-)

Vielen Dank im Vorraus!

Le_ruse

PS: Mein Server unterstützt natürlich PHP und MySQL ;-)
 
naja wenn du die Werte der einzelnen Bewertungen in deiner Tabelle oder txt datei gespeichert hast, kannst du doch die Werte ausslesen und mathematisch den Mittelwert berechen. Oder versteh ich dich falsch?
 
Hört sich sehr logisch an und dürfte eigentlich funktionieren. Aber ich bin in meinem Buch leider noch net so weit vorgedrungen, da ich noch blutiger Anfänger in PHP bin *g*

Wär nett, wenn du mir ein wenig auf die Sprünge helfen könntest :-)

Le_ruse
 
sagen wir einmal, du benutzt eine mysql-tabelle namens "links":

Code:
+--+------+-------+-----------+
|id| link |ratings|ratingcount|
+--+------+-------+-----------+
| 1|web.de|  356  |       5671|
+--+------+-------+-----------+

dann addierst du jedesmal den übergebenen Wert (im form tag 'note' genannt) auf "ratingcount" und erhöhst "rating" um eins. Zusätzlich muss im form auch ein hidden feld mit der link-"id" aus der mysql-tabelle sein.

PHP:
$q = "UPDATE ´links´ SET ratings = ratings+1, ratingcount = ratingcount+".$_POST[note]." WHERE id = ".$_POST[id].";"
mysql_query($q);

Wenn du nun abfragen willst, was die 10 besten link sind geht das wieder mit einem sql-query:
PHP:
$q = "SELECT *, (ratingcount/ratings) as ´av´ FROM ´links´ ORDER BY ´av´ LIMIT 0,10;"
$r = mysql_query($q);
// und so weiter.

Hoffe, das hilft dir.
 
Die Durchschnittsbildung wird sogar von MySQL unterstützt:

SELECT AVG(spalte) AS durchschnitt

Somit hat man dann den Durchschnittswert aller im Select Bewehl erfassten Zeilen. Du kannst ja damit auch deine Seiten in Kategorien einordnen und dann anhand dieser Kategorien ein WHERE Statement bauen, das dann den nur den Durchschnittswert aller Elemente dieser Kategorie enthält....

After Post:
ich sehe gerade, dass du den Durchschnitt ja gleich in die Tabelle speichern willst. Meiner Meinung nach verspielst du dir damit die Erweiterungsmöglichkeiten. Siehe obiges Kategorienbeispiel. Das könntest du dann nicht mehr realsieren, weil der Durchschnitt ja für alle gevoteten Seiten gilt.

Ciao, F.o.G.
 
Zuletzt bearbeitet:
Code:
AVG(spalte) AS durchschnitt

geht nciht, da er ja nciht den Durchschnittswert der noten aller links haben möchte, sondern pro link.

in deinem Beispiel hätte jeder link eine tabelle und jeder vote eine Reihe, das wäre wohl etwas zu viel des guten.
 
hmm, ja. Ich kenn ja seine DB Struktur auch net.

Würde das gehen?

SELECT AVG(spalte) AS durchschnitt FROM blabla GROUP BY linkspalte ORDER BY durchschnitt DESC LIMIT 10

?

Ich denke schon, so würde der Durchschnitt nur per Gruppe, also pro Link ausgegeben werden. und das 10 Results lang.

Theoretisch geht das.

Ciao, F.o.G.
 
Zurück