Seite 1 von 1

MySQL Abfrage

Verfasst: 18.08.2005 21:34
von mgutt
Hi,

ich mache gerade eine MySQL Abfrage.

Ich habe folgende Werte: (Bilder Top 10)

- views
- rating
- votes

jetzt die Abfrage wie gehabt:

Code: Alles auswählen

$sql = "SELECT id, upname, views, rating, votes
		FROM ". PIC_TABLE ."
		WHERE 
		ORDER BY id DESC";
Ich möchte jetzt aber folgende Ergebnisse:

maxview = Viewzahl des meistbesuchten Bildes

Liste der 100 besten Bilder im Rating
Liste der 100 besten Bilder in Views

ratingschnitt = rating / votes
viewschnitt = 100 / maxview x views

Formel ca. so:

bildrating = ( 70 x ratingschnitt + 30 x viewschnitt) / 100

Das ergibt dann eine Punktzahl von 0-100 Punkte

In der Topliste wollte ich dann dieses eigene Rating in einen Balken fließen lassen.

Ich hoffe mit dieser Formel zu verhindern, dass neue Bilder nur mit 3 Votes in die Topliste kommen und ein Mindestvote wollte ich nicht einbauen, dass wäre mir zu langweilig ;)

Naja, die Frage ist jetzt ob das überhaupt in einer Abfrage zu lösen ist. Ich glaube mal nicht oder?

Verfasst: 18.08.2005 23:17
von mgutt
die Formel ist irgendwie zu kompliziert habe ich das Gefühl :lol:

ich weiß gar nicht wie ich die Bilder nun sortieren soll.

eigentlich müsste ich doch alle aus der Datenbank erstmal berechnen lassen oder nicht?

weil ich kann ja so nur nach meisten views sortieren oder nach dem besten ranking.

aber wenn ich beides mache, dann heißt, dass ja noch lange nicht, dass die 10 besten dabei zu ermitteln sind.. alles sehr kompliziert ;)

also nochmal kurz die daten, die ich habe pro Bild:

id, views, rating, votes

- id ist auto_increment
- views, der Besucherzähler
- rating, die Gesamtpunktzahl
- votes, wie oft bewertet wurde

Re: MySQL Abfrage

Verfasst: 19.08.2005 01:19
von kellanved
Ich möchte jetzt aber folgende Ergebnisse:
maxview = Viewzahl des meistbesuchten Bildes

Code: Alles auswählen

$sql = "SELECT MAX(views)
		FROM ". PIC_TABLE 
		
Liste der 100 besten Bilder im Rating

Code: Alles auswählen

$sql = "SELECT id, upname, views, rating, votes
		FROM ". PIC_TABLE ."		
		ORDER BY rating DESC LIMIT 100";
Liste der 100 besten Bilder in Views

Code: Alles auswählen

$sql = "SELECT id, upname, views, rating, votes
		FROM ". PIC_TABLE ."		
		ORDER BY views DESC LIMIT 100";
...
Naja, die Frage ist jetzt ob das überhaupt in einer Abfrage zu lösen ist. Ich glaube mal nicht oder?
Dies ist in der Tat nicht mit einer Anfrage zu erledigen (zumindest nicht ohne subqueries).

Mit bekanntem maxview sähe es so aus:

Code: Alles auswählen

$sql = "SELECT id, upname, views, rating, votes,  (70*rating/votes) + (3000 * views / <maxviews>) AS score
      FROM ". PIC_TABLE ." 
      WHERE 
      ORDER BY score DESC LIMIT 100";
 
Macht allerdings wenig Sinn, da mit steigender Zahl von Stimmabgaben die Bewertung des Bildes sinkt. rating/votes ist also eher ungeeignet für eine solche Metrik. Eher so etwas:

Code: Alles auswählen

$sql = "SELECT id, upname, views, rating, votes,  (rating - rating/votes) + 0.5 * (rating - rating/views)   AS score
      FROM ". PIC_TABLE ." 
      WHERE 
      ORDER BY score DESC LIMIT 100";
 
Wegen der Division durch 0 nich wirklich elegant, sollte aber ganz gut funktionieren: die Bewertung wird erst durch Stimmen oder Views bedeutsam.