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

Numerar un listado ordenado

Estas en el tema de Numerar un listado ordenado en el foro de Mysql en Foros del Web. Hola foreros, tengo un problema con una lista de datos que quiero mostrar a la cual le quiero añadir un número de serie (de 1 ...
  #1 (permalink)  
Antiguo 17/11/2009, 12:36
Avatar de loki_gz  
Fecha de Ingreso: febrero-2008
Mensajes: 48
Antigüedad: 16 años, 2 meses
Puntos: 2
Pregunta Numerar un listado ordenado

Hola foreros,

tengo un problema con una lista de datos que quiero mostrar a la cual le quiero añadir un número de serie (de 1 hasta n). Dicha lista tiene un orden específico dado a través de un ORDER BY.

He leído la FAQ de gnzsoloyo en la cual explica como hacerlo y así lo he hecho, pero el problema es que asigna los números de serie antes de ejecutar el ORDER BY, con lo que el listado aparece ordenado como yo quiero pero con los números de serie descolocados (o colocados según el orden ascendente del ID correspondiente a cada registro).

No sé si me he explicado bien, pero espero que me podáis ayudar con la solución.

Agradezco de antemano cualquier aportación.
  #2 (permalink)  
Antiguo 17/11/2009, 12:45
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Numerar un listado ordenado

Postea la consulta.
Es muy probable que la cosa se resuelva agregando un nivel de anidamiento (recuerda que el nivel donde se genera la numeración siempre es el exterior).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/11/2009, 13:00
Avatar de loki_gz  
Fecha de Ingreso: febrero-2008
Mensajes: 48
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Numerar un listado ordenado

Ahí va:

Código PHP:
SELECT (@n:=@n+1PosNombreApel1Apel2DNICategoria
FROM Nombres JOIN DNI ON RefIdDNI
=IdDNI JOIN Categorias ON RefIdCategoria=IdCategoria, (SELECT @n:=0NUM
WHERE RefIdCategoria
<9
GROUP BY Categoria
ORDER BY Apel1
Apel2Nombre 
  #4 (permalink)  
Antiguo 17/11/2009, 13:10
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Numerar un listado ordenado

Necesita un nivel más:
Código sql:
Ver original
  1. SELECT (@n:=@n+1) Pos, Nombre, Apel1, Apel2, DNI, Categoria
  2. FROM
  3.   (SELECT @n, Nombre, Apel1, Apel2, DNI, Categoria
  4.   FROM Nombres JOIN DNI ON RefIdDNI=IdDNI JOIN Categorias ON RefIdCategoria=IdCategoria, (SELECT @n:=0) NUM
  5.   WHERE RefIdCategoria<9
  6.   GROUP BY Categoria
  7.   ORDER BY Apel1, Apel2, Nombre ) T1;

La clave es que el listado se debe numerar cuando ya no va a sufrir ningún tipo de cambios.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/11/2009, 16:43
Avatar de loki_gz  
Fecha de Ingreso: febrero-2008
Mensajes: 48
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Numerar un listado ordenado

Gracia por tu respuesta y por la explicación. Ahora comprendo donde está el fallo.

Lo he probado y funciona perfectamente. Eres un crack! No es la primera vez que me ayudas y te lo agradezco
  #6 (permalink)  
Antiguo 17/11/2009, 17:17
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Numerar un listado ordenado

Por nada. Me alegra que te sirviera.

Saludos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 21:02.