Criando um índice de ordem numérica em uma tabela MySQL

Eu tenho uma mesa com (essencialmente) 3 colunas – nome, votos e sorting. Eu quero pedir a tabela por votos e, em seguida, atualizar ‘rank’ para refletir essa ordem, de modo que aquela com a maioria dos votos terá o ranking definido para 1, o segundo mais votos para 2, etc.

Eu posso fazer isso em PHP, mas parece muito desperdício – existe uma maneira de fazer isso com uma consulta SQL sem ter que processar manualmente todos os registros no PHP?

Supondo que você não se preocupe com os laços, você pode simplesmente calcular o ranking dinamicamente em suas consultas em vez de armazená-lo.

  SET @rank=0; SELECT @rank:=@rank+1 AS rank, name, votes FROM yourTable ORDER BY votes DESC; 

Embora @johnfx lhe tenha dado a resposta correta, acho que você estará interessado em ler os comentários deste artigo – http://arjen-lentz.livejournal.com/55083.html onde vários problemas de sorting são resolvidos.