Ti posto un esempio
codice:
create table posizioni (
id int not null auto_increment,
nome char(1),
punti int,
posizione int,
primary key (id)
) engine=myisam
insert into posizioni (nome,punti)
values
('a',2),
('b',7),
('c',3),
('d',9),
('e',10),
('f',8),
('g',9),
('h',7),
('i',6),
('l',3)
set @riga = 0, @posizione = 0, @preced = 0;
update posizioni as p inner join
(select id,@riga := @riga + 1 as riga, nome,
@posizione := if(@preced<>punti,@riga,@posizione) as posizione,
@preced := punti as punti
from posizioni order by punti desc) as t
on p.id = t.id
set p.posizione = t.posizione
select * from posizioni order by posizione
Comunque eviterei di memorizzare la posizione in tabella, poi decidi tu.