La verdad, el tema es interesante. Aunque creo que es un caso más para el foro de bases de datos.
La manera cómo está planteada la solución se va tornando menos óptima si:
- La cantidad total de registros es alta.
- El registro particular que buscamos está más cerca del último lugar.
Pero el problema no parece estar aterrizado en un caso concreto, así que voy a utilizar lo propuesto por McBlink
Cita:
Iniciado por McBlink es muy comun saber en que posicion esta un registro, por ejemplo para sacar en que posicion de un ranking esta X usuario.
Entonces, supongamos que tenemos esta tabla:
Código:
tabla: usuarios
------------------------
id nombre puntos
------------------------
1 juan 400
2 carola 100
3 lucas 200
4 pedro 500
5 paula 300
------------------------
...y queremos saber en qué posición del ránking está "lucas"(id = 3).
Una manera de resolver el problema pude ser dividirlo en dos consultas:
- Una que nos diga el puntaje del usuario "lucas" (o id=3).
- Otra que nos diga cuántos registros hay con más de ése puntaje.
Código PHP:
$id_usuario_buscado = 3;
$sql_puntaje_usuario = "SELECT puntos FROM usuarios WHERE id = $id_usuario_buscado";
$resultset_puntaje = mysql_query($sql_puntaje_usuario);
$puntaje_usuario_buscado = mysql_result($resultset_puntaje, 0);
$sql_posicion_usuario = "SELECT COUNT(id) AS posicion WHERE puntos > $puntaje_usuario_buscado";
$resultset_posicion = mysql_query($sql_posicion_usuario);
$posicion_usuario_buscado = mysql_result($resultset_puntaje, 0);
Es una manera muchísimo más eficiente de hacer lo que plantean.
No sé si pueda haber otra mejor provista por el motor de mysql directamente. Podrían preguntar en el foro de Bases de datos.
Un abrazo