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

[SOLUCIONADO] Ordernar query por dos condiciones

Estas en el tema de Ordernar query por dos condiciones en el foro de Mysql en Foros del Web. Hola, estoy liado con un select que no consigo solucionar, la estructura de la tabla es: usuario fecha ****** | ***** nick1 | 2013-10-11 nick2 ...
  #1 (permalink)  
Antiguo 01/10/2013, 16:01
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Ordernar query por dos condiciones

Hola, estoy liado con un select que no consigo solucionar, la estructura de la tabla es:

usuario fecha
****** | *****
nick1 | 2013-10-11
nick2 | 2013-10-12
nick3 | 2013-10-13
nick4 | 0000-00-00
nick5 | 0000-00-00
nick6 | 0000-00-00

Lo que necesito conseguir es un select * from tabla pero que ordene mediante rand(), primero los usuarios que tienen fecha, y después también aleatorio los que no tienen fecha. La condición es que los que tienen fecha, no se mezclen con los que no tienen.

Me podéis echar una mano? Gracias!!
__________________
Viaja gratis por el mundo - Descubre como puedes viajar gratis por el mundo y conocer gente
  #2 (permalink)  
Antiguo 01/10/2013, 16:21
Avatar de hmvr414  
Fecha de Ingreso: marzo-2011
Ubicación: Santiago de Cali, Colombia
Mensajes: 74
Antigüedad: 13 años, 1 mes
Puntos: 16
Respuesta: Ordernar query por dos condiciones

Código MySQL:
Ver original
  1. SELECT *,
  2. CASE WHEN `fecha` IS NULL THEN 'NO'
  3.   ELSE 'SI'
  4. END AS ConFecha,
  5. RAND() as Aleatorio
  6. FROM usuarios
  7. ORDER BY ConFecha, Aleatorio;

le podes agregar mas cases cuando la fecha es null y cuando es '0000-00-00'
  #3 (permalink)  
Antiguo 02/10/2013, 01:26
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ordernar query por dos condiciones

Solucionado, gracias!!
__________________
Viaja gratis por el mundo - Descubre como puedes viajar gratis por el mundo y conocer gente
  #4 (permalink)  
Antiguo 02/10/2013, 05:31
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: Ordernar query por dos condiciones

¿Estás seguro?
Me parece que la solución que te proponen no cumple con esto:
Cita:
La condición es que los que tienen fecha, no se mezclen con los que no tienen.
¿Puedes confirmarlo?
__________________
¿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 02/10/2013, 05:35
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Ordernar query por dos condiciones

Sí, lo consigue gracias a esto:

CASE WHEN `fecha` IS NULL THEN 'NO' ELSE 'SI' END AS ConFecha

y después ordenas ConFecha según te interese.

Saludos.
__________________
Viaja gratis por el mundo - Descubre como puedes viajar gratis por el mundo y conocer gente
  #6 (permalink)  
Antiguo 02/10/2013, 05:49
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: Ordernar query por dos condiciones

Yo entiendo la lógica del CASE en un SELECT, no te preocupes. Tengo cierta experiencia con MySQL...

Personalmente, el uso de CASE en un SELECT la considero una solución de programadores, no de DBA. Se procura evitar usar en esa forma porque tiene serios problemas de performance cuando las consultas aplican a tablas más grandes, ya que trata los valores como cadenas de texto, con lo que muchas veces genera demasiado uso de memoria (un "0" y un 0 ocupan diferente cantidad de memoria), además de conversiones implícitas innecesarias.

Es preferible el uso de IF, y no CASE para cosas como lo que quieres.
Algo como:
Código MySQL:
Ver original
  1. SELECT *, IF(fecha` IS NULL, 1, 0) ConFecha, RAND() Aleatorio
  2. FROM usuarios
  3. ORDER BY ConFecha, Aleatorio;

De todos modos es tu decisión.

Nota: El AS es irrelevante, sólo sirve para ensuciar el código y ya no es parte del estandar ANSI SQL. Procura no usarlo.
Sólo se conserva por compatibilidad, pero las directivas de desarrollo en las empresas de software especifican que no se lo use (estoy segur, trabajo en una).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: condiciones, query, select, tabla
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:03.