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

Ordenar consulta teniendo DATE_FORMAT

Estas en el tema de Ordenar consulta teniendo DATE_FORMAT en el foro de Mysql en Foros del Web. Hola a todos! Estoy tratando de imprimir (de una tabla MySQL) los usuarios registrados que llevan más de 60 días inactivos (comparada con el campo ...
  #1 (permalink)  
Antiguo 23/09/2011, 08:46
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Ordenar consulta teniendo DATE_FORMAT

Hola a todos!

Estoy tratando de imprimir (de una tabla MySQL) los usuarios registrados que llevan más de 60 días inactivos (comparada con el campo extra_info de tipo date) y le pido que el ORDER BY sea según su fecha de registro.

Pero resulta que el orden me lo imprime primero por el día, luego por el mes y último por el año. Esto supongo que se debe al DATE_FORMAT que le he dado al campo de la fecha de registro que es "registered".

La consulta la puse así:

Código PHP:
"SELECT *, DATE_FORMAT(extra_info, '%d-%m-%Y') AS extra_info, 
DATE_FORMAT(registered, '%d-%m-%Y') AS registered
FROM users WHERE
DATE_SUB(CURDATE(),INTERVAL 60 DAY) >= extra_info 
AND active = 'y'
AND listaunpu = '0'          
AND access_level >= '2'          
ORDER BY registered "

Lo que quiero lograr es que me lo ordene primero por año, luego mes y por último el día.

He buscado y no encuentro como darle solución. Por favor, alguien me puede dar ayuda?
  #2 (permalink)  
Antiguo 23/09/2011, 09:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Seguí buscando y encontré esta posibilidad, lo probé y parece que funciona pero no estoy seguro si es correcto y adecuado hacer esto:

Código PHP:
"SELECT *, DATE_FORMAT(extra_info, '%d-%m-%Y') AS extra_info, 
DATE_FORMAT(registered, '%d-%m-%Y') AS registered
FROM users WHERE
DATE_SUB(CURDATE(),INTERVAL 60 DAY) >= extra_info 
AND active = 'y'
AND listaunpu = '0'          
AND access_level >= '2'          
ORDER BY STR_TO_DATE(registered, '%Y/%m/%d') DESC "

Saludos!
  #3 (permalink)  
Antiguo 23/09/2011, 09:12
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Nooooooo... me he dado cuenta de que no funciona con esa solución, sigue ordenando de forma incorrecta a lo que quiero!

Por favor, sigo necesitando ayuda!
  #4 (permalink)  
Antiguo 23/09/2011, 13:01
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Ordenar consulta teniendo DATE_FORMAT

puedes incluir incluir el campo tipo date nuevamente y ordenarlo, así mira

Código MySQL:
Ver original
  1. SELECT *, DATE_FORMAT(extra_info, '%d-%m-%Y') AS extra_info,  
  2. DATE_FORMAT(registered, '%d-%m-%Y') AS registered,
  3. registered AS to_order
  4. FROM users WHERE
  5. DATE_SUB(CURDATE(),INTERVAL 60 DAY) >= extra_info  
  6. AND active = 'y'
  7. AND listaunpu = '0'          
  8. AND access_level >= '2'          
  9. ORDER BY to_order DESC;
  #5 (permalink)  
Antiguo 23/09/2011, 14:09
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Disculpas... pero el campo a ordenar cómo se agrega con el "to_order DESC"
  #6 (permalink)  
Antiguo 23/09/2011, 17:44
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 consulta teniendo DATE_FORMAT

to_order es un alias en la última columna. ORDER BY puede referirse a columnas por sus alias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 24/09/2011, 01:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Ejecutando el ejemplo que me da Ribon me tira este error:

Mysql dijo: Unknown column 'to_order' in 'order clause'

La columna registered existe, a la cual se le está poniento el alias "to_order", no se que estaré haciendo mal
  #8 (permalink)  
Antiguo 24/09/2011, 05:13
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 consulta teniendo DATE_FORMAT

Puede ser que no esté reconociendo correctamente los campos, ya que tienes un campo real y un alias con la misma denominación. Eso no es una buena práctica.
Pruebalo:
Código MySQL:
Ver original
  1.     *,
  2.     DATE_FORMAT(extra_info, '%d-%m-%Y') extrainfo,  
  3.     DATE_FORMAT(registered, '%d-%m-%Y') registrado
  4. FROM users
  5.     DATE_SUB(CURDATE(),INTERVAL 60 DAY) >= extra_info  
  6.     AND active = 'y'
  7.     AND listaunpu = '0'
  8.     AND access_level >= '2'          
  9. ORDER BY registered DESC;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 24/09/2011, 06:31
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Puede que no hayas visto que agregué el siguiente campo al listado de campos

registered AS to_order

de todas formas, estás trayendo todos los campos con * por lo que dice gnzsoloyo es completamente válido ya que registered también es traido (de hecho le puse un alias para que no salga repetido y no tengas problemas para reconocer el nombre del campo que usaste para ordenar)

saludos.
  #10 (permalink)  
Antiguo 24/09/2011, 07:21
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 consulta teniendo DATE_FORMAT

Yo lo vi, pero es irrelevante si ya está incluido en el listado. En ese contexto no se necesitaba.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 24/09/2011, 13:18
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Probé como me dice gnzsoloyo:

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Puede ser que no esté reconociendo correctamente los campos, ya que tienes un campo real y un alias con la misma denominación. Eso no es una buena práctica.
Pruebalo:
Código MySQL:
Ver original
  1.     *,
  2.     DATE_FORMAT(extra_info, '%d-%m-%Y') extrainfo,  
  3.     DATE_FORMAT(registered, '%d-%m-%Y') registrado
  4. FROM users
  5.     DATE_SUB(CURDATE(),INTERVAL 60 DAY) >= extra_info  
  6.     AND active = 'y'
  7.     AND listaunpu = '0'
  8.     AND access_level >= '2'          
  9. ORDER BY registered DESC;
Es decir, si no me equivoco, sin los alias (AS) y los imprime bien, pero sin reconocer el "DATE_FORMAT" del campo "registered", osea que me imprime "Y-m-d"
  #12 (permalink)  
Antiguo 24/09/2011, 14:16
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 consulta teniendo DATE_FORMAT

Las última dos columnas deben aparecer forzosamente como "dd-MM-aaaa", porque están afectadas por la función. Lo que si puede suceder es que en las primeras columnas el registered aparezca normalmente, pero eso es por efecto del "*", ya que le dato está apareciendo de las dos formas, es decir, dos veces.
SI no quieres que aparezca de la primera forma tienes que invocar todos los campos por su nombre, y no usar la llamada genérica.

¿Cómo está apareciendo en esas dos columnas, extrainfo y registrado?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 24/09/2011, 16:57
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 19 años, 6 meses
Puntos: 3
Respuesta: Ordenar consulta teniendo DATE_FORMAT

Bueno, ahora sí!!!

Invoqué todos los campos por su nombre y funciona!

Muchas gracias gnzsoloyo y también Ribon
  #14 (permalink)  
Antiguo 24/09/2011, 17:51
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 consulta teniendo DATE_FORMAT

__________________
¿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: select, sql, 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 11:56.