webForumDet fria alternativet

Index av flera faktorer

Databaser & SQL

3 svar · 194 visningar · startad av joakimweb

Medlem sedan feb. 2002141 inlägg
Frågan#1

Hej!

Jag tänkte göra en topplista som sorteras utefter ett slags index baserat på följande:

tbl_toplist_users
userId
userIn
userOut
userStart (nollställs varje söndag)

Detta index skulle rent matematiskt skapas enligt följande:
(userIn + (userOut/5)) / (DateDiff(userStart -- Now))
Alltså att userIn har störst betydelse och att ju längre tid som gått desto fler röster behövs för att bibehålla sitt index-tal. Detta gör det också möjligt för nya användare att gå med enkelt.

Jag har ärligt talat ingen aning om hur det skall lösas i SQL.
"SELECT userId, userIn, userOut FROM `databas2`.`tbl_toplist_users` Order By userIn DESC limit 15"
Är grunden.

Tacksam för allt!

Medlem sedan dec. 200012 464 inlägg
#2

Du kan ju lägga in uttrycket direkt i order by om du vill

order by 
(userIn + (userOut/5)) / (DateDiff('h',userStart,Now())) desc
Medlem sedan feb. 2002141 inlägg
#3

Tack LarsG, dock är versionen 4.0.x (slarvigt av mig att inte ange)
Unix_timestamp eller nåt finns, men hur skulle det användas?
Eller finns det något ännu bättre?

/Joakim

Medlem sedan feb. 2002141 inlägg
#4

Ett stort tack till alla!

Jag löste det så här:
SELECT *, (userIn + (userOut/5)) / ((UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(userFrom))/60/60) As userIndex FROM `db2`.`tbl_toplist_users` Order By userIndex DESC, userId ASC limit 15"

/Joakim

254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)