La solución es en realidad simple: es una consulta con subconsultas en tres niveles:
1. El nivel interior solamente recoge todos los datos y le agrega una primera columna con una variable inicializada a cero.
2. El segundo nivel ordena todos los scores en forma descendente y numera a cada uno.
3. En el tercer nivel recién se puede recoger uno específico...
Código sql:
Ver originalSELECT LINEA, SCORES.*
FROM
(SELECT (@REG := @REG + 1) LINEA, T2.*
FROM
(SELECT @REG :=0, famous.* FROM famous ORDER BY score DESC) T2
) SCORES
WHERE id='$id';
Normalmente, este tercer nivel no se realiza en la base, sino que tomas la tabla devuelta en el segundo nivel y luego, en el programa, seleccionas el o los registros que te interesan.
La consulta tal y como la planteas está hecha para devolver un sólo registro, por eso requiere tres niveles: Si la selección del registro la hicieras en el segundo, todavía no se han numerados las jerarquías, por lo que su numero sería siempre uno, ya que solamente tomaría un registro de todo el conjunto...
¿Se entiende la idea?