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

Duda con ORDER BY

Estas en el tema de Duda con ORDER BY en el foro de Mysql en Foros del Web. Hola, Tengo una tabla que contiene los campos: destacado, d1 y nombre. El problema que tengo es que quiero ordenar los resultados de dos formas ...
  #1 (permalink)  
Antiguo 06/12/2008, 12:06
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Duda con ORDER BY

Hola, Tengo una tabla que contiene los campos: destacado, d1 y nombre. El problema que tengo es que quiero ordenar los resultados de dos formas distintas dependiendo del valor que tenga el campo destacado, si su valor es 1 quiero que me lo ordene por los campos d1 y nombre, pero si su valor es 0 solo quiero ordenar por nombre.
Hice esto:

SELECT * FROM tabla ORDER BY destacado DESC, d1 DESC, nombre ASC

El resultado queda ordenado los primeros los que tienen 1 en destacado (a su vez esta ordenado por d1 y nombre) y luego aparecen los que tiene 0 en ese campo, entonces a estos ultimos quiero ordenarlos solo por el nombre (sin el campo d1).

Gracias!!
__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #2 (permalink)  
Antiguo 08/12/2008, 08:10
 
Fecha de Ingreso: agosto-2006
Mensajes: 101
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Duda con ORDER BY

Hola compañero,
yo haría dos consultas unidas por UNION ALL, especificando la condición de destacado=0 o destacado=1 en la parte del WHERE. Prueba con la siguiente consulta:
Código:
(SELECT * FROM tabla WHERE destacado=1 ORDER BY d1 DESC, nombre ASC)
UNION ALL
(SELECT * FROM tabla WHERE destacado=0 ORDER BY nombre ASC)
También te dejo un enlace a la documentación del UNION de MySql:
http://dev.mysql.com/doc/refman/5.0/es/union.html

Un saludo.
__________________
Artículos sobre programación - www.webprogramacion.com
  #3 (permalink)  
Antiguo 08/12/2008, 12:06
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 3 meses
Puntos: 36
Respuesta: Duda con ORDER BY

Hola dvelazquez, probe lo que dijiste pero no funciona, las dos consultas por separado si funcionan bien, pero cuando pongo el UNION no lo ordena bien. Igualmente muchas gracias.
Dejo un screenshoot:

__________________
Spread Firefox | Download Day 2008
¡Únete en nuestra misión para alcanzar el Record Guinness al software más descargado en 24 horas! http://www.spreadfirefox.com/es-ES/worldrecord/
  #4 (permalink)  
Antiguo 09/12/2008, 08:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 31
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Duda con ORDER BY

Hola amigos, tengo una dura que estoy poniendo a prueba y me lleva loco.

tengo una web, que quiero que me salgan las fotos que coloco desde mi panel de control, en la paguina principal con el orden dy.

tengo esto, que se lecciono una id de la categoria.

Código PHP:
$q->exec("SELECT id,titulo,imagen FROM contenidos WHERE mininoticia = 1 AND id_categoria = 57 ORDER BY id DESC LIMIT 6"); 
Pero mi duda, es si se pueden cojer barias id de la misma categoria.
Pero solo las que yo quiera.
Para que me salgan en la misma lista de fotos.

Ejemplo:

contenidos - 1
contenidos - 2
contenidos - 3
contenidos - 4
contenidos - 5

Y yo solo quiero que salgan las fotos de la contenidos - 2, 4 y 5.

¿eso se puede hacer?
  #5 (permalink)  
Antiguo 10/12/2008, 16:10
 
Fecha de Ingreso: diciembre-2007
Mensajes: 31
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Duda con ORDER BY

hola amigos
perdonen la impaciencia perono en cuentro como hacerlo en dingun sitio.
se podria ahcer esto que intento hacer?
  #6 (permalink)  
Antiguo 10/12/2008, 17:57
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: Duda con ORDER BY

Por lo que parece, lo que quieres hacer es un ORDER BY condicional, al menos es lo que se desprende de esto:
Cita:
si su valor es 1 quiero que me lo ordene por los campos d1 y nombre, pero si su valor es 0 solo quiero ordenar por nombre.
El problema es que no existe un ORDER BY condicional, al menos en MySQL. Lo único que puedes hacer es definir un esquema de ordenamiento encadenado, esto es, primero por A, luego por B y luego por C. Pero lo que pretendes es que si A vale X se ordene por A, B y C, pero si A vale X+1 se ordene por B, A y C...
En esencia eso es imposible de hacer en un una sentencia, porque solamente puede haber un esquema de orden por cada SELECT.
Pero no es imposible de realizar... pero como no puedes hacer con ambos esquemas a la vez, porque afectará a todos los registros al mismo tiempo, entonces debes realizar dos SELECT que te devuelvan los conjuntos de cada valor, y luego ordenarlos todos.
Si observas atentamente tu propio ejemplo:

notarás que debes hacer un SELECT para obtener los d1=1 y destacado=1, luego otro para los d1=1 y destacado=0, y otro más para los otros.
El problema se da cuando quieras agruparlos, ya que un UNION, por default, los ordenará por el primer campo clave o por el primer campo del WHERE, además de eliminar los duplicados. Queda entonces solamente el UNION ALL.
Así bien, mi sugerencia práctica sería probar esto:
Código sql:
Ver original
  1. SELECT *
  2. FROM (
  3.    (SELECT id, titulo, imagen
  4.     FROM contenidos
  5.     WHERE d1=1 AND destacado = 1
  6.     ORDER BY destacado, d1, nombre ) T1
  7.    UNION ALL
  8.    (SELECT id, titulo, imagen
  9.     FROM contenidos
  10.     WHERE d1=1 AND destacado = 0
  11.     ORDER BY destacado, nombre, d1) T2
  12.    UNION ALL
  13.    (SELECT id, titulo, imagen
  14.     FROM contenidos
  15.     WHERE d1=0 AND destacado = 1
  16.     ORDER BY d1, nombre, destacado) T3
  17.    ) T4;

Esto es sólo un modelo. Ajusta los datos y testea cuál es la combinación correcta. No descartes el ejemplo a priori, ni lo tomes al pie de la letra. Prueba, y vuelve a probar... Sé que el modelo es funcional porque lo probé antes de ponerlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/12/2008 a las 18:07
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 10:14.