webForumDet fria alternativet

Kod för ett s.k. rating script?

ASP

17 svar · 464 visningar · startad av His Divine Shadow

Medlem sedan sep. 20004 079 inlägg
Frågan#1

Jag funderar på hur jag ska göra ett script där man kan betygsätta en bok/artikel(i detta fall en bok), man ska kunna välja 1-5 stjärnor, detta ska då läggas in i en databas, där sparas:
-ID (vanlig räknare)
-BokID (finns en annan tabell som har alla böcker redan)
-Rating (1-5, torde jag lägga numeriskt eller vanligt sträng?)
-UserID(för namnet på den som röstade)

Men hur gör jag då en kod som tar Rating från alla inlägg som har samma BokID(som kommer från en querystring) och går igenom alla och räknar ut en "average rating"?

Så och om en lägger 5 och en annan 1 då blir svaret 2.5

Det finns ju sånt på Amazon.com t.ex.
Men hur gör jag en sån kod?

Medlem sedan mars 20015 287 inlägg
#2

Hur får du 1 + 5 / 2 till 2.5 ?

Lägg in ett numeriskt värde!

Sen när du plockar ut datat med hjälp av BokId kan du väl antingen göra en count (el vad det heter) direkt isql-satsen eller addera ihop allt i en loop.
Detta delar du sedan med antalet poster.

Medlem sedan sep. 20004 079 inlägg
#3

solbulle skrev:

Hur får du 1 + 5 / 2 till 2.5 ?

Jag tänkte att värdet mitt emellan 1 och 5 så är 2.5

Medlem sedan juni 2000547 inlägg
#4

Medelvärdet av 6 (1+5) är väl ändå 3. I alla fall om min matte stämmer.

Medlem sedan nov. 20017 144 inlägg
#5

Ehhh, jag tror att man kan förstå principen ändå.

Medlem sedan sep. 20004 079 inlägg
#6

SilvioF skrev:

Medelvärdet av 6 (1+5) är väl ändå 3. I alla fall om min matte stämmer.

Jo, det var jag som tänkte fel faktiskt.

Medlem sedan dec. 200012 464 inlägg
#7
query = "select avg(rating+0.0),bokId from rating group by bokId"

Så får du medelvärdet för alla böcker

Medlem sedan sep. 20004 079 inlägg
#8

LarsG skrev:

query = "select avg(rating+0.0),bokId from rating group by bokId"

Så får du medelvärdet för alla böcker

Ah, tack, det såg ju enkelt ut :)

Detta är väl bara en vanlig SQL sats så jag kan väl lägga till
Where BokID = '"& Request("Bok") &"'
för att specifiera böcker?

Hur hämtar jag värdet förresten?
<%=avg(0)%> kanske?
Man använder ju det för COUNT så... Ja gissar nu bara.

Medlem sedan dec. 200012 464 inlägg
#9

Om du bara har en bok så behövs ingen group by

Då blir det bara

q = "select avg(rating+0.0) from rating where bokId = " & request.form("bok")
set avg = connect.exexute(q)
response.write avg(0)

(Om du har både where och group by så skall where anges före group by.)

Medlem sedan sep. 20004 079 inlägg
#10

LarsG skrev:

Om du bara har en bok så behövs ingen group by

Nja, det blir nog nära 100 böcker ;)

Medlem sedan sep. 20004 079 inlägg
#11

Hur får jag jämmna nummer? Jag får resultat som 3.6777777 nu.
Funkar inte med min kod som jag använder för att visa resultatet i stjärnor.
Förresten, jag tycker det ser lite klumpigt ut, finns det nått bättre sätt?

					<%If avg(0) = "1" THEN %>
					<img src="images/onepoint.gif">
					<%END IF%>
					<%If avg(0) = "2" THEN %>
					<img src="images/twopoint.gif">
					<%END IF%>
					<%If avg(0) = "3" THEN %>
					<img src="images/threepoint.gif">
					<%END IF%>
					<%If avg(0) = "4" THEN %>
					<img src="images/fourpoint.gif">
					<%END IF%>
					<%If avg(0) = "5" THEN %>
					<img src="images/fivepoint.gif">
					<%END IF%>
Medlem sedan mars 20015 287 inlägg
#12

Döp dina bilder till 1.gif osv (eller 1point.gif) typ ock kör:

snitt = round(avg(o))

If snitt > 0 then
response.write "<img src=""images/" & snitt & ".gif"">"
End if
Medlem sedan sep. 20004 079 inlägg
#13

solbulle skrev:

Döp dina bilder till 1.gif osv (eller 1point.gif) typ ock kör:

snitt = round(avg(o))

If snitt > 0 then
response.write "<img src=""images/" & snitt & ".gif"">"
End if

Ah, funkar fint, fast jag tror jag ska tillåta en decimal, kan det göra så att det rundar antingen till ett helt tal eller x.5?
Alltså, så här:
1
1.5
2
2.5
3
3.5
4
4.5
5

Medlem sedan sep. 20004 079 inlägg
#14

Om någon är intresserad av slutresultatet kom till min hemsida och se på "Novel Chronology" :)

http://hisshadow.123hostnow.com/

Medlem sedan mars 20015 287 inlägg
#15

Ursäkta språket, men "skitsnyggt" tycker jag.

(*känner mig lite delaktig* ;) )

Medlem sedan nov. 20017 144 inlägg
#16

Kan man inte bara göra ngt liknande istället?

snitt = left(avg(o)),1)
response.write "<img src=""images/" & snitt & "_star.gif"">"

Och döpa stjärnorna till 0_star.gif, 1_star.gif osv.

Medlem sedan mars 20015 287 inlägg
#17

Eh? Då blir det väl inte så bra avrundat eller?

3,9 -> 3 ???

Medlem sedan nov. 20017 144 inlägg
#18

Nja, visst svinn får man ju alltid räkna med... ;)

266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)