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

Obtener fila en mysql

Estas en el tema de Obtener fila en mysql en el foro de Bases de Datos General en Foros del Web. Hola tengo una tabla para un ranking tipo id | usuario | puntos la ordeno tipo select * from tabla order by puntos desc y ...
  #1 (permalink)  
Antiguo 24/06/2008, 04:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 264
Antigüedad: 17 años
Puntos: 0
Obtener fila en mysql

Hola tengo una tabla para un ranking tipo

id | usuario | puntos

la ordeno tipo select * from tabla order by puntos desc

y quiero k al indicarle un usuario m devuelva la fila en la que esta, osea el puesto del ranking... se puede hacer de alguna manera?' un saludo
  #2 (permalink)  
Antiguo 24/06/2008, 05:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Obtener fila en mysql

No se como resolver los empates pero....


Código:
select count(*) as ranking form tabla
          where puntos>=(Select puntos form tabla where nombre='m')
Sirve?

Quim
  #3 (permalink)  
Antiguo 24/06/2008, 05:31
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 8 meses
Puntos: 300
Respuesta: Obtener fila en mysql

Son cosas que se hacen mejor con programación, pero si te empeñas en hacerlo con MySQL.

select * from (select a.equipo, a.puntuacion, (select 1 + count(*)from nombretabla b where b.puntuacion > a.puntuacion) RANK from nombretabla as a) as x order by x.RANK

La idea está sacada de:
http://www.onlamp.com/pub/a/mysql/20...ql.html?page=4

En caso de empate, numera los dos con el mismo número, pero el siguiente salta. Si hay empate en la tercera posición, aparecen 3 y 3, pero el siguiente aparece como 5.

Explicación: comparas los datos de la tabla primera con los de la segunda, que son la misma tabla; si el b.puntuacion es el mayor de todos los de la tabla b, el resultado de la comparación con el a.puntuacion mayor de la tabla a, da un count(*) = 0, al que, tras sumarle 1, da 1, y lo coloca en la primera posición; el segundo daría un count de 1, +1=2; y así sucesivamente con los demás.

No es recomendable si se trata de muchos datos, pues el self-join ofrece un rendimiento bajo. Lo mejor: hacerlo con programación...

Última edición por jurena; 09/11/2008 a las 08:28
  #4 (permalink)  
Antiguo 24/06/2008, 09:07
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 9 meses
Puntos: 13
Respuesta: Obtener fila en mysql

muy interesante jurena, gracias por el aporte!

layker, parece que es algo que vas a utilizar mucho, puedes crear una vista y lanzar las consultas contra ella.

Salu2
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 23:16.