Udregning af database information før indsættelse på side

Tags:    php

Hej :)

Er igang med at lave en side med spil hvor der skal være en "rating" for hver spil. Disse spil skal være sorteret efter denne rating.

Problemet er bare at informationen om hvor højt spillene er rated findes i en anden tabel hvor hver række har information om hvilket spil der er rated, hvilken krakter/rating det har fået og hvad ip adressen er.

Hvis jeg skal sortere efter denne information er jeg nød til først at indsamle bedømningen for hvert spil, finde gennemsnittet og derefter sortere dem efter det så de kan blive vist på siden i rigtig rækkefælge.

Er der nogen der har et bud på hvordan jeg gør det?
Tak på forhånd :D



Er du bare ude efter at få en sorteret liste over alle spil på baggrund af deres ratings?

En anden gang, vil det være en fordel hvis du inkluderer tabel definitioner i dit spørgsmål.

Fold kodeboks ind/udKode 



select GameID, avg(Rating * 1.0) as Rating from tblRatings group by GameID order by Rating desc


Edit: SQL query er testet mod SQLServer2005



Indlæg senest redigeret d. 12.07.2009 20:41 af Bruger #1425
Kan du forklare mig hvad denne linje gør.

Forresten. Jeg kunne jo sagtens trække alle spillene ud af tabellen og så derefter udregne deres rating. Men problemet er at jeg så ikke kan sortere i det.

Skal jeg indsætte informationen i et array sammen med den udregnet gennemsnitlige rating og ved hjælp af den sortere???





Indlæg senest redigeret d. 12.07.2009 21:28 af Bruger #15155
Noget i retning af det her:

SELECT g.id,(r.srating/r.cratings) AS rating FROM games as g LEFT JOIN (SELECT id,count(*) as cratings,SUM(rating) as srating FROM ratings GROUP BY id) AS r ON(g.id=r.id) ORDER BY rating DESC





Din kode kan jeg desværre ikke få til at virke :(

Måske jeg skulle have skrevet noget mere information :$

Mine tabeller ser såledet ud:


Table Ratings:
+----------+------------+-----------+
| rid.........| ip............| rating.....|
+----------+------------+-----------+

rid = Hvilket spil der rates
ip = Hvilken ip adresse der haer rated
rating = Hvad der er rated (1-5)


Table Games:
+------------+-----------+
| id............| link.........|
+------------+-----------+

id = spillets id
link = linket til spillet


Jeg har prøvet og søge lidt på de forskellige funktioner du har brugt og har også prøvet at sammenstykke noget selv. Men det fungere ikke.

Jeg er sikker på at der skal bruges funtionerne GROUP BY til at samle alle ratings for hvert spil og count() til at tælle hvor mange gange der er blevet rated. Udover det skal også bruges LEFT JOIN til at stykke de to tabeller sammen til en. Har jeg fåstået det ret?

Hvis der er nogen der vil være venlig at stykke en kode sammen der virker vil jeg være meget taknemmelig :D



Indlæg senest redigeret d. 15.07.2009 12:02 af Bruger #15155
Det her testede til at virke på tabeller der ligner dine en smule og så ændrede til at passe til dine:

SELECT g.id,r.arating,r.ratings FROM Games AS g LEFT JOIN (SELECT rid,count(*) AS ratings,AVG(rating) AS arating FROM `Ratings` GROUP BY rid) AS r ON(g.id=r.rid) ORDER BY r.arating DESC




t