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

Ordenar por fechas

Estas en el tema de Ordenar por fechas en el foro de Mysql en Foros del Web. Hola, Tengo una tabla en mysql que contiene varios campos entre ellos uno llamado fecha de tipo datetime, quiero mostrar los resultados de la tabla ...
  #1 (permalink)  
Antiguo 09/08/2011, 18:55
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Ordenar por fechas

Hola,

Tengo una tabla en mysql que contiene varios campos entre ellos uno llamado fecha de tipo datetime, quiero mostrar los resultados de la tabla según esa fecha, ordenadas por fecha próxima a la actual.

¿Como lo podría hacer?, ya he intentado de todo y parece que funcionaba pero no...

También he buscado por google pero no he encontrado la solución.
  #2 (permalink)  
Antiguo 09/08/2011, 21: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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Código MySQL:
Ver original 
__________________
¿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 09/08/2011, 22:46
Avatar de arielenter  
Fecha de Ingreso: abril-2009
Mensajes: 75
Antigüedad: 15 años
Puntos: 2
De acuerdo Respuesta: Ordenar por fechas

Código MySQL:
Ver original
  1. SELECT * FROM mi_tabla ORDER BY el_campo_fecha ASC

en ves de ASC le pones DESC - Si queres que te orden en forma descendente
__________________
www.enterpy.net
  #4 (permalink)  
Antiguo 10/08/2011, 06:59
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Quiere proximidad, no fecha.
Si fuese por fecha, funcionaría la proximidad si y sólo si la fecha más reciente es la más próxima a la actual, pero si almacena otro tipo de fechas...
__________________
¿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 10/08/2011, 10:11
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

Lo he puesto así:

Código:
		$partidos = $wpdb->get_results("SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada FROM ".$wpdb->prefix."_partidos WHERE temporada='".intval($temporada)."' ORDER BY TIMESTAMPDIFF(DAY,fecha, NOW()) DESC");
y tengo varios resultados entre ellos uno del dia de hoy y otro del dia de mañana, el caso es que sale primero el día de mañana y luego el día de hoy...

Última edición por danicss; 10/08/2011 a las 10:17
  #6 (permalink)  
Antiguo 10/08/2011, 10:20
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Entonces ponle ASC y no 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)
  #7 (permalink)  
Antiguo 10/08/2011, 10:23
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

si le puse antes asc y me lo ordena de mayor a menor :s, con asc me lo ordena así

  #8 (permalink)  
Antiguo 10/08/2011, 10:32
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

¿Mayor a menor?
Eso no es correcto...
Código MySQL:
Ver original
  1.     id,
  2.     equipo_l,
  3.     equipo_v,
  4.     fecha,
  5.     hora_conf,
  6.     competicion,
  7.     jornada,
  8.     tipo,
  9.     id_ant,
  10.     temporada
  11.     ".$wpdb->prefix."_partidos
  12.     temporada='".intval($temporada)."'
La pregunta: ¿La fecha puede ser anterior o posterior a la actual? ¿O son siempre anteriores?
__________________
¿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 10/08/2011, 10:40
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

Con asc me lo ordena como enseñé en la foto y con DESC me lo ordena de fecha mas próxima a mas lejana, no sé por que pasa eso pero pasa, el caso es que el primer registro sale el de dia 11 y luego otro del dia 10, pero los siguientes están ordenados de mas proximos a menos próximos.

Las fechas pueden ser anterior y posterior a la actual sí. De lo que se trata es de listar los partidos por jornada, si por ejemplo la jornada 1 tiene partido el día 10, 15 y 13 y la jornada 2 tiene partido el 11, 20 y 23 saldría los resultados paginados de la siguiente forma:

En la primera página la jornada 1, ya que tiene partido el dia 10 y es el mas próximo al dia de hoy, cuando le den a siguiente saldría la jornada 2, una vez que pase este día y sea día 11, esto será al contrario, saldría primero la jornada 2, yaque tiene el partido mas próximo osea el del dia 11 que es mañana, y al darle a siguiente la jornada 1...

es un poco lioso todo pero eso es lo que quiero hacer y llevo con esto bastantes semanas y estoy atascado...
  #10 (permalink)  
Antiguo 10/08/2011, 10:54
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Cita:
Con asc me lo ordena como enseñé en la foto y con DESC me lo ordena de fecha mas próxima a mas lejana, no sé por que pasa eso pero pasa, el caso es que el primer registro sale el de dia 11 y luego otro del dia 10, pero los siguientes están ordenados de mas proximos a menos próximos.
Bueno, partiendo del hecho que estamos comparando campos DATETIME con valores DATETIME, y con una función que espera DATETIMEs, el problema es que una fecha 11/8/2011 respecto de la de hoy puede devolver 0 días si la diferencia de horas es inferior a 24.
Esto se da simplemente porque TIMESTAMPDIFF puede determinar el valor de la resta con una diferencia de segundos. Así, la diferencia entre "2011-08-09 11:38:45" y "2011-08-10 11:38:44" es de cero (0) días, pero con "2011-08-09 11:38:45" es de un (1) día.
¿Se entiende?
En ese contexto, no se debe comparar como DATETIME sino como DATE, para que haya una diferencia sustancial. En ese caso corresponde usar DATE_DIFF()

Código MySQL:
Ver original
  1.     id,
  2.     equipo_l,
  3.     equipo_v,
  4.     fecha,
  5.     hora_conf,
  6.     competicion,
  7.     jornada,
  8.     tipo,
  9.     id_ant,
  10.     temporada
  11.     ".$wpdb->prefix."_partidos
  12.     temporada='".intval($temporada)."'
Pero como DATEDIFF requiere que el primer miembro sea siempre mayor que el segundo o de lo contrario dará negativo, y en este caso puede ser mayor o menor, es mejor usar también ABS para eliminar el signo:
Código MySQL:
Ver original
  1.     id,
  2.     equipo_l,
  3.     equipo_v,
  4.     fecha,
  5.     hora_conf,
  6.     competicion,
  7.     jornada,
  8.     tipo,
  9.     id_ant,
  10.     temporada
  11.     ".$wpdb->prefix."_partidos
  12.     temporada='".intval($temporada)."'
__________________
¿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 10/08/2011, 11:11
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

Me a costado entenderlo, he tenido que leerlo 3 veces pero ya lo he pillado. ¡Muchisimas gracias!
  #12 (permalink)  
Antiguo 10/08/2011, 11:14
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

__________________
¿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 10/08/2011, 11:17
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

Una última pregunta... con CURDATE sacas la fecha actual del sistema.. pero y si yo quiero ponerle una fecha "manualmente".. he echo una consulta a la db para sacar una fecha datetime del campo fecha y utilizarla en vez de curdate pero da este error:

Código:
WordPress database error: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00:00:00)) ASC limit 1' at line 1]
SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada FROM wp_partidos WHERE temporada='1' and jornada='2' ORDER BY ABS(DATEDIFF(DATE(fecha), 2011-08-10 00:00:00)) ASC limit 1
lo intenté así y tambien falla

Código:
SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada FROM wp_partidos WHERE temporada='1' and jornada='2' ORDER BY ABS(DATEDIFF(DATE(fecha), ABS(DATE(2011-08-10 00:00:00)))) ASC

Última edición por danicss; 10/08/2011 a las 11:26
  #14 (permalink)  
Antiguo 10/08/2011, 11:34
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Por favor, usa las etiquetas de cada tipo de código. Las encontrarás en el combobox donde dice "Highlight". El código se visualzará mejor.

Por un lado, el ABS es para números y no para fechas. No tiene sentido usarlo en un DATE(). Ese ABS() está afectando en realidad a la función DATEDIFF, y no a la función DATE().

Por otro, las fechas, para que puedan ser convertidas implícitamente, deben estar como cadenas de texto, y eso no lo estás haciendo.
Tu estás poniendo:
Código MySQL:
Ver original
  1. SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada
  2. FROM wp_partidos
  3. WHERE temporada='1' and jornada='2'
  4. ORDER BY ABS(DATEDIFF(DATE(fecha), DATE(2011-08-10 00:00:00))) ASC
y debes poner:

Código MySQL:
Ver original
  1. SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada
  2. FROM wp_partidos
  3. WHERE temporada='1' and jornada='2'
  4. ORDER BY ABS(DATEDIFF(DATE(fecha), DATE('2011-08-10 00:00:00'))) ASC
Por otro lado, si lo vas a poner manualmente, no tiene ninguna utilidad ni sentido que mandes un DATETIME, para eso mandas un DATE:

Código MySQL:
Ver original
  1. SELECT id,equipo_l,equipo_v,fecha,hora_conf,competicion,jornada,tipo,id_ant,temporada
  2. FROM wp_partidos
  3. WHERE temporada='1' and jornada='2'
  4. ORDER BY ABS(DATEDIFF(DATE(fecha), '2011-08-10')) ASC

En otras palabras: No hagas las cosas innecesariamente complicadas. Lo pagarás con performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 11/08/2011, 06:55
 
Fecha de Ingreso: febrero-2011
Mensajes: 37
Antigüedad: 13 años, 2 meses
Puntos: 2
Respuesta: Ordenar por fechas

gracias, funcionó perfectamente. Me he dado cuenta de una cosa, los registros que ya pasaron de la fecha actual, salen después del primer registro mas cercano. Y una vez que salen los registros ya pasados sale el resto de registros... como puedo poner los registros que ya pasaron de la fecha actual en las ultimas posiciones?

Una imágen vale mas que mil palabras:

  #16 (permalink)  
Antiguo 11/08/2011, 07:27
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, 5 meses
Puntos: 2658
Respuesta: Ordenar por fechas

Probablemente requiera hacer un UNION y crear la consulta en dos SELECTS de modo que el primero te tome los futuros y el segundo los vencidos.
__________________
¿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: campos, fechas, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 08:45.