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

Obtener la posicion al ordenar

Estas en el tema de Obtener la posicion al ordenar en el foro de Bases de Datos General en Foros del Web. Hola buenas necesito saber la posicion de un registro al hacer un Order by, se me ocurre una forma un tanto chapucera que prefiero no ...
  #1 (permalink)  
Antiguo 17/05/2009, 15:39
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Obtener la posicion al ordenar

Hola buenas necesito saber la posicion de un registro al hacer un Order by, se me ocurre una forma un tanto chapucera que prefiero no hacer, que es mediante un bucle recorrer el resultado de la consulta e ir comparando y al mismo tiempo con un indice en ejecucion obtener esa posicion. No desearia tener que hacerlo asi, pero no se me ocurre otra solucion.

Gracias de antemano, un saludo
  #2 (permalink)  
Antiguo 17/05/2009, 15:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 meses
Puntos: 360
Respuesta: Obtener la posicion al ordenar

Que base de datos usas?

Lo que quieres es en la consulta, poner la posición dependiendo el numero de registros que tenga la consulta? Por ejemplo.

contador---campo1-----campo2
1--------------valor1------valor2
2--------------valor3-------valor4
3--------------valor5--------valor6

????
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 17/05/2009, 16:18
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Respuesta: Obtener la posicion al ordenar

La base de datos es del tipo MyIsam

Ejmplo de consulta

SELECT * FROM liga WHERE equipo=$id ORDER BY clasificacion

Esta consulta estaria mal ya que me devolveria solo un registro ... y por mucho que fuera el ultimo de la clasificacion como podria ser el Español xD estaria en primera posicion y ganaria la liga ....

Yo tengo una tabla liga donde tengo un campo donde le voy dando puntos a los equipos y necesito saber la posicion de ese equipo. Y lo que no quiero es hacer una consulta a pelo con el contador, lo quiero evitar...
  #4 (permalink)  
Antiguo 18/05/2009, 10:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Obtener la posicion al ordenar

Yo lo haría con PHP, pero si quieres hacerlo con la base de datos, también puedes y este es el foro adecuado. Imaginemos que tienes una tabla llamada equipos, con un campo llamado puntuacion en el que tienes sumados ya los puntos. Puedes hacer esto:

Código sql:
Ver original
  1. SELECT t1.Rank, t1.equipo, t1.puntuacion FROM (SELECT
  2. @rank:=@rank+1 AS Rank,
  3. t.equipo, t.puntuacion
  4. FROM (SELECT @rank:=0) r, equipos t
  5. ORDER BY t.puntuacion DESC)t1 WHERE t1.equipo = 'nombreequipo'

Primero asignas número de orden a todos los equipos según su puntuación y luego puedes buscar el equipo y traerte su posición.

Si solo quieres los equipos y su posición, te basta con esto:
Código sql:
Ver original
  1. SELECT
  2. @rank:=@rank+1 AS Rank,
  3. t.equipo, t.puntuacion
  4. FROM (SELECT @rank:=0) r, equipos t
  5. ORDER BY t.puntuacion DESC
  #5 (permalink)  
Antiguo 18/05/2009, 12:55
Avatar de naitmeir  
Fecha de Ingreso: junio-2008
Ubicación: Barcelona
Mensajes: 227
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Obtener la posicion al ordenar

Tiene buena pinta. Esto que haces de ":=" lo he visto en PLSQL pero no con MySQL supongo que es para asignar una variable y lo de la @ que funcion tiene? rank se supone que es una variable o un campo?

Ahora no me da tiempo a ponerme a probarlo pero ya te dire si me ha servido, pero ya veo que tiene buena pinta. Gracias jurena, te lo curras ;)
  #6 (permalink)  
Antiguo 18/05/2009, 13:57
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Obtener la posicion al ordenar

naitmeir,
efectivamente, @ es la marca de variable de MySQL, y := es la marca que sirve para asignar un valor a esas variables. En realidad, esto no es mío: puedes encontrarlo en la red y también en las FAQ de MySQL encontrarás un ejemplo de gnzsoloyo. En varios posts de genetix y de algunos otros del foro también puedes encontrar algún ejemplo, incluido huesos52, que por eso te preguntaba. Yo sólo lo he adaptado para el caso de que quieras buscar un equipo (es la primera consulta).
Espero que consigas lo que quieres.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 01:59.