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

ordenar fechas php

Estas en el tema de ordenar fechas php en el foro de Mysql en Foros del Web. hola a todos en mysql tengo un campo fecha con caracteristica de texto ejem: 1-NOV-2011 2-NOV-2011 10-NOV-2011 lo que pasa es que yo para ver ...
  #1 (permalink)  
Antiguo 14/11/2011, 09:37
Avatar de Melecio  
Fecha de Ingreso: julio-2011
Ubicación: Coahuila
Mensajes: 320
Antigüedad: 12 años, 9 meses
Puntos: 8
ordenar fechas php

hola a todos

en mysql tengo un campo fecha con caracteristica de texto

ejem:
1-NOV-2011
2-NOV-2011
10-NOV-2011


lo que pasa es que yo para ver todas las fechas que son iguales solo saco una de cada fecha que sea diferente

esto lo logro con DISTINCT

SELECT DISTINCT fecha from produccion ORDER BY fecha ASC

con esto lo que hace es mostrarmelos de la siguente forma

1-NOV-2011
10-NOV-2011
2-NOV-2011


alguna idea de ordenarlas correctamente
  #2 (permalink)  
Antiguo 14/11/2011, 09: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: ordenar fechas php

Cita:
alguna idea de ordenarlas correctamente
Si: Tienes muy mal definida esa columna. Estás usando un VARCHAR cuando en realidad deberías usar un DATE.
Si tu problema es el formato de representación, ese asunto no se resuelve usando un tipo de datos equivocado, sino utilizando funciones que permitan recuperar la fecha escrita de la forma que necesitas mostrarla, cosa que se hace con la función DATE_FORMAT(fecha, formato).
Ahora tienes un lindo problema: volver a normalizar esos datos, porque así como los tienes te los ordenará alfabéticamente.
Usar STR_TO_DATE() para reconvertirlos puede no ser una opción, si los has guardado con sus nombres en castellano. Puede que no los reconozca.
__________________
¿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 15/11/2011, 10:53
Avatar de Melecio  
Fecha de Ingreso: julio-2011
Ubicación: Coahuila
Mensajes: 320
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: ordenar fechas php

si el probelma es que ya tiene miles de datos

si lo cambio adate las fechas se ponen en ceros

talvez de esta forma funcione

extraer fecha y romperla con split

list($dia, $mes,$ano) = split("-", $FECHA_FECHAS);


pero no se como organizarlas una vez extraidos
  #4 (permalink)  
Antiguo 15/11/2011, 11:06
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 fechas php

Mi consejosería:
1) crea un campo de tipo DATE en esa tabla.
2) Copia la fecha convertida a DATE a ese campo.
3) Cuando hayas procesado toda la tabla, elimina el campo original.
4) Cambia el nombre del campo de fecha por el anterior.

Todo eso te llevará menos tiempo, si lo haces con un script, y te dará mejores resltados.
Esta tarde te paso como sería la secuencia de consultas SQL para lograr eso.
Y por sobre todo: no vuelvas a usar VARCHAR para almacenar datos que no sean de cadenas de texto.
__________________
¿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 15/11/2011, 11:14
Avatar de Melecio  
Fecha de Ingreso: julio-2011
Ubicación: Coahuila
Mensajes: 320
Antigüedad: 12 años, 9 meses
Puntos: 8
Respuesta: ordenar fechas php

esta bien en mi bd todos los campos son text

gracias
  #6 (permalink)  
Antiguo 15/11/2011, 12:43
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 fechas php

¡¡¡¿¿Todos TEXT?!!!



Hermanito: Necesitas urgente lecciones de bases de datos...
Esto que estás haciendo es una calamidad que lo único que te traerá son problemas.

Esta tarde vemos el tema.
__________________
¿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 15/11/2011, 19:29
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 fechas php

Bueno, volvamos al punto.
Supongamos que campo en cuestión se llama fecha, y lo has definido como TEXT. Una calamidad, como ya dije, porque una fecha se almacena en realidad en un DATE o DATETIME, que a nivel de programación del kernel se implementa como un DOUBLE y se graban como números binarios. Esto no es importante para tí, pero te da una idea que no es lo mismo grabar una fecha con 8 bytes en lugar de usar 11 ó 12...
¿no te parece?
Por otro lado, un TEXT requiere más memoria y recursos para su gestión que un VARCHAR o un CHAR; por eso no es conveniente usarlos a menos que específicamente estés manipulando grandes cantidades de texto. Entre otras cosas, requiere que cuando se usen para crear índices, se definan la longitud del bloque a indexar, las comparaciones de una columna TEXT contra un valor implica el uso de algoritmos diferentes a los de comparación de cadenas (esto es interno) que son bastante más complejos, y un largo etcétera.
Usar, por otro lado, TEXT para almacenar datos numéricos, como puedes estar haciendo, también es un error, porque ocupan demasiado espacio, al ser almacenados como cifras.
En los sistemas de bases de datos los números, sin importar cuáles son, se almacenan como valores binarios, enteros o de punto flotante, lo que hace que ocupen mucho menos espacio. Así, por ejemplo, un valor como 18.446.744.073.709.551.615 no ocupa 26 bytes, sino 8...

Yendo al método de resolver el error cometido, la idea es primero crear un campo para la fecha:
Código MySQL:
Ver original
  1. ALTER TABLE tabla ADD COLUMN fecha_temp DATE AFTER FECHA;

Luego, realizamos el traspaso de los datos, lo que suponiendo que se guardaron con los meses en inglés, sería:
Código MySQL:
Ver original
  1. UPDATE TABLE TABLA SET fecha_temp = STR_TO_DATE(fecha, '%d-%b-%Y');
Luego pruebas que la conversión se haya realizado bien y eliminas la columna que estaba:

Código MySQL:
Ver original
  1. ALTER TABLE tabla DROP COLUMN fecha;

Para finalmente cambiarle el nombre a la nueva:
Código MySQL:
Ver original
  1. ALTER TABLE tabla MODIFY COLUMN fecha_temp fecha DATE;

Eso sería mas o menos la idea.

Consejo: Haz una copia de la tabla que vas a cambiar y realiza pruebas antes de realizarlo con la tabla de trabajo.
__________________
¿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: php, select, sql
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:42.