Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/11/2011, 19:29
Avatar de gnzsoloyo
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 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)