MySQL Abfrage

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

MySQL Abfrage

Beitrag 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?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag 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
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
kellanved
Mitglied
Beiträge: 570
Registriert: 05.02.2005 15:15
Wohnort: Berlin

Re: MySQL Abfrage

Beitrag 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.
Bitte keine Supportanfragen via PM
Antworten

Zurück zu „Coding & Technik“