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

Ordenar según varios elementos agrupados

Estas en el tema de Ordenar según varios elementos agrupados en el foro de Mysql en Foros del Web. Buenas a todos Tengo esta tabla de ejemplo para entender el titulo y mi duda [TABLA animales] idANIMAL TIPO 0 perro 1 gato 2 tortuga ...
  #1 (permalink)  
Antiguo 17/12/2008, 09:35
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 16 años, 5 meses
Puntos: 1
Pregunta Ordenar según varios elementos agrupados

Buenas a todos

Tengo esta tabla de ejemplo para entender el titulo y mi duda


[TABLA animales]

idANIMAL TIPO

0 perro
1 gato
2 tortuga
3 perro
4 tortuga
5 gato
6 perro


Ahora lo que necesito es que me salga el resultado de la siguiente manera, (según columna TIPO):

0 - 3 - 6
2 - 4
1 - 5


Como veís se ordenan siguiendo un patrón (perro, tortuga, gato), es lo que yo necesito pero adaptado a mi base de datos.

Agradecería vuestra colaboración.

Un saludo a todos
  #2 (permalink)  
Antiguo 17/12/2008, 09:50
 
Fecha de Ingreso: septiembre-2008
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Ordenar según varios elementos agrupados

Hola xenon254,

La verdad es que lo tengo un poco olvidadillo ya, pero no sería suficiente con un

WHERE....
group by(TIPO);

Ya me contarás, un saludo
  #3 (permalink)  
Antiguo 17/12/2008, 09:51
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar según varios elementos agrupados

Prueba esto:

Código sql:
Ver original
  1. SELECT TIPO, GROUP_CONCAT( CAST( idANIMAL AS CHAR )
  2. SEPARATOR ' - ' )  numsidAnimal
  3. FROM animales
  4. GROUP BY TIPO

Entiendo que idANIMAL es numérico; de ahí que sea necesario el cast para introducirlo en GROUP_CONCAT(), donde sólo se aceptan cadenas de texto.

Última edición por jurena; 17/12/2008 a las 10:12
  #4 (permalink)  
Antiguo 19/12/2008, 03:22
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Ordenar según varios elementos agrupados

Buenas

Gracias por vuestros post. Pero creo que no he sabido explicarme. Voy a poner el caso real y os explico sobre plano.


idjugador - equipo - nombre - fnacimiento - posicion - foto

0 Alevínes Francisco 1982-07-07 Centrocampista 4946a89a04812.jpg
1 Alevínes Carlos 1990-06-23 Portero 4946a2fa7587e.jpg
2 Alevínes Juan 1981-01-12 Centrocampista 493823c10eb9c.jpg
3 Alevínes Héctor 1984-10-14 Defensa 4946a2e298ac8.jpg
4 Alevínes David 1980-11-12 Delantero 492ae31f0956a.png
5 Alevínes Jose 1981-05-08 Entrenador 494949f377a28.jpg
6
7 ..........

Ahora lo que necesito es sacar el listado en php pero usando una consulta MYSQL que me ordene según esto:

Portero - Defensa - Centrocampistas - Delanteros - Entrenador

Ahora con el caso práctico es más cómodo.

Gracias por vuestra atención.
  #5 (permalink)  
Antiguo 19/12/2008, 09:23
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: Ordenar según varios elementos agrupados

Hay varias formas para ello, pero una de las más sencillas sería que Posición fuese una tabla con ID numéricos y que el orden de esos ID coincidiese con el orden que pretendes, en caso contrario, el método para lograr lo que quieres será algo enredado.
La pregunta entonces: ¿La posición la ingresas a mano o la tomas de una tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 19/12/2008, 09:25
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Ordenar según varios elementos agrupados

Buenas

Se escoge de un listbox.
  #7 (permalink)  
Antiguo 19/12/2008, 10:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Ordenar según varios elementos agrupados

xenon254,
soy de la opinión de gnzsoloyo: lo mejor, crear una tabla nueva posiciones algo así:
ID posicion
1 portero
2 defensa
3 centrocampista
4 delantero
5 entrenador

En la tabla donde tienes los nombres el campo posicion deberá ser numérico y en él guardarás el valor del ID. Es decir, en el campo posicion de la tabla donde incluyes los nombres, en el registro del portero, deberá aparecer 1.

Luego la consulta la ordenas por ID.

Así estarás usando el id como elemento que te permita ordenar.
También podrías añadir otro campo numérico llamado criterioordenacion, en el que pondrías el número según te interese ordenar. Esto te ofrece algo más de flexibilidad, porque si más adelante se te ocurre introducir nuevas posiciones, mediovolante, y cosas así, te bastará con reordenar esos números de criterioordenacion en la tabla posiciones, algo que te resultaría dificultoso hacer con el id, que es primary key y sirve para establecer las relaciones. Yo en estos casos, salvo que la lista esté completamente cerrada, prefiero esto:
ID posicion criterioordenacion
1 portero 1
2 defensa 2
3 centrocampista 3
4 delantero 5
5 entrenador 6
6 mediovolante 4

y claro, cuando hago la consulta, ordeno por criterioordenacion, algo más flexible y que permite añadir nuevos registros.


En el selector tendrás que hacer que lo seleccionado, el value sea el id, y lo mostrado la posicion, pero eso no te resultará dificil.

Como bien dice gnzsoloyo, hay otras soluciones, como por ejemplo esta:

Código sql:
Ver original
  1. SELECT nombre, posicion,
  2. CASE WHEN posicion = "portero"
  3. THEN 1
  4. WHEN posicion = "defensa"
  5. THEN 2
  6. WHEN posicion = "centrocampista"
  7. THEN 3
  8. WHEN posicion = "delantero"
  9. THEN 4
  10. WHEN posicion = "entrenador"
  11. THEN 5
  12. ELSE 6
  13. END AS orden
  14. FROM tabla
  15. ORDER BY orden, nombre


Pero no te la recomiendo pudiendo hacer lo otro.
  #8 (permalink)  
Antiguo 19/12/2008, 10:17
 
Fecha de Ingreso: noviembre-2007
Ubicación: Zamora (Spain)
Mensajes: 251
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Ordenar según varios elementos agrupados

Buenas

Gracias por vuestro consejo, lo tendré que aplicar para la proxima ocasión porque ya está el sistema creado y las tablas con muchos datos, sería un jaleo cambiar la forma. De todas maneras para salvar el "trasero" utilizaré la segunda, aunque debo leerla con más calma con el el fin de comprenderla.

Un saludo
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 06:28.