Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Número X de un total de Y

Estas en el tema de Número X de un total de Y en el foro de Mysql en Foros del Web. Hola. Ejemplo de tabla: Nombre Valor Pepe 14 Juan 20 María 43 Santi 3 Ana 24 Pretendo sacar el número de orden que ocupa un ...
  #1 (permalink)  
Antiguo 16/10/2009, 08:39
 
Fecha de Ingreso: diciembre-2007
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
Número X de un total de Y

Hola.

Ejemplo de tabla:


Nombre Valor
Pepe 14
Juan 20
María 43
Santi 3
Ana 24


Pretendo sacar el número de orden que ocupa un elemento entre una lista de elementos de la base de datos.

Necesito sacar de por ejemplo "Juan ocupa la posición 3 de un total de 5" ordenando por valor.

Sacar una SQL con ORDER BY `Valor` Me ordenaría los resultados, pero no sabré la posición exacta de "Juán" a no ser que recorra toda la consulta. Eso no sería operativo porque tengo en torno a 20.000 registros y puede ser bastante lento ya que en la misma pantalla calculo otras cosas.

¿Alguien puede aportarme alguna idea?

Muchas gracias.
  #2 (permalink)  
Antiguo 16/10/2009, 08:54
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Número X de un total de Y

Código mysql:
Ver original
  1. mysql> desc order_m;
  2. +-------+-------+------+-----+---------+-------+
  3. | Field | Type  | Null | Key | Default | Extra |
  4. +-------+-------+------+-----+---------+-------+
  5. | nom   | text  | YES  |     | NULL    |       |
  6. | valor | float | YES  |     | NULL    |       |
  7. +-------+-------+------+-----+---------+-------+
  8. 2 rows in set (0.02 sec)
  9.  
  10. mysql> SELECT
  11.     ->     (@REG := @REG + 1) Linea,
  12.     ->     nom,
  13.     ->     valor
  14.     -> FROM
  15.     ->     (SELECT
  16.     ->         @REG :=0,
  17.     ->         nom,
  18.     ->         valor
  19.     ->     FROM order_m) om order by om.valor desc;
  20. +-------+-------+-------+
  21. | Linea | nom   | valor |
  22. +-------+-------+-------+
  23. |     1 | maria |    43 |
  24. |     2 | ana   |    24 |
  25. |     3 | juan  |    20 |
  26. |     4 | pepe  |    14 |
  27. |     5 | santi |     3 |
  28. +-------+-------+-------+
  29. 5 rows in set (0.02 sec)
  30.  
  31. mysql>

algo así?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/10/2009, 09:04
 
Fecha de Ingreso: mayo-2009
Ubicación: Madrid
Mensajes: 62
Antigüedad: 15 años
Puntos: 4
Respuesta: Número X de un total de Y

¡Te me has adelantado!

Código:
SET @row = 0;
SELECT @row := @row + 1 AS row, nombre, valor
FROM nombres
ORDER BY valor
Muy similar en esencia
  #4 (permalink)  
Antiguo 16/10/2009, 09:12
 
Fecha de Ingreso: mayo-2009
Ubicación: Madrid
Mensajes: 62
Antigüedad: 15 años
Puntos: 4
Respuesta: Número X de un total de Y

Voy a desarrollar un poco más la consulta encapsulándola en otra consulta que sólo me devuelva el registro deseado con su posición:

Código:
SET @row = 0;
SELECT col, nombre
FROM (
  SELECT @row := @row + 1 AS col, nombre, valor
  FROM nombres
  ORDER BY valor
) names
WHERE nombre="Juan"
El select interior saca nombres, valores y posiciones, y el select exterior muestra sólo el registro de "Juan"

La respuesta es "3 => Juan"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.