Ver Mensaje Individual
  #10 (permalink)  
Antiguo 07/12/2009, 13:29
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: posición relativa de un registro en la base de datos

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 original
  1. SELECT LINEA, SCORES.*
  2. FROM
  3.   (SELECT (@REG := @REG + 1) LINEA, T2.*
  4.    FROM
  5.       (SELECT @REG :=0, famous.* FROM famous ORDER BY score DESC) T2
  6.    ) SCORES
  7. 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?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)