Troels Arvin wrote:
> On Fri, 18 May 2007 19:01:17 +0200, Morten wrote:
>> Jeg har en tabel hvor hver række har en score, der er beregnet ud
>> fra nogle af de andre attributter.
>>
>> Denne score er absolut. Jeg vil i stedet hellere give rækken en relativ
>> rank, således hvis der er 10 rækker i tabellen, så er rank et tal fra 1
>> til 10 (hvor rækken med max score har rank 1).
>
> Visse SQL-implementationer har netop RANK() OVER:
>
http://troels.arvin.dk/db/rdbms/#select-top-n
Det er smart, jeg må lige undersøge hvordan det forholder sig for MySQL,
og PostgreSQL.
>> Hvordan gør man det? Jeg tænkte først, at lave en AFTER UPDATE/INSERT
>> trigger, hvor jeg genberegner rank for samtlige rækker og opdaterer
>> disse, men det vil vel give problemer med muterende tabeller.
>
> Det lyder som noget, der hurtigt vil give problemer, hvis din applikation
> begynder at få samtidige brugere.
Du har sikkert ret, det bliver noget rod at skulle opdatere potentielt
tusindvis af records ved hver insert/update. Jeg overvejer om jeg er
bedre stillet ved at køre et job hver halve time, der beregner rank og
opdaterer et rankings table.
Morten