Bueno despues de unos días de autentico caos debido a problemas con las personas del justhost ya os contare mi anecdota puesto que esto no quedara asi, pienso dar mi opinion sobre estos señores con pelos y señales para que la proxima persona que decida contratar un dominio con ellos se lo piense dos veces si dado el momento no he publicado el articulo y quieres mi opinion mandame un mail y gustosame te detallare informacion al respecto.
A lo que vamos que me caliento y al final no doy una solucion, pues tenemos un base de datos con un temario el temario va ordenador mediante un varchar como el siguiente.
orden
1
2
3
4
4.1
4.2
5
5.1
5.10
Bien si intentamos ordenar esto con un convert(orden,signed) asc nos dara un listado donde el 5.1 y el 5.10 no apareceran correctamente ordenados puesto que los valores de cero a la derecha de la coma no representan nada.
Mi solucion ha sido sacar los valores a la derecha del punto, y sobre eso ordenarlo, aqui tambien he encontrado un problema y es que si mi valor de orden no tiene decimales en vez de sacar 0 me saca el numero a la izquierda del punto
Bien os cuento como he ido haciendolo, incluyendo mis primeras pruebas 🙂
He usado la sintasis de mysql floor para saber el valor de los decimales.Con Floor saco el valor de las unidades, si a orden le resto las unidades me dara sus decimales, que ocurre que en algunas ocasiones en vez de darme 0.10 me daba 0.99999 con lo que no me ha sevido este primer intento.
select id,nid,nombre,orden,floor(orden),round(orden-FLOOR(nivel),2) FROM temario
order by floor(orden),
orden-FLOOR(orden) asc;
Aqui la solucion.
He usado SUBSTRING_INDEX con 1 para las unidades y -1 para los decimales, tambien he usado la opcion de if dentro de la select para saber si tengo o no decimales.
select id,nombre,orden,SUBSTRING_INDEX(orden,’.’,1),if(length(orden)>2,SUBSTRING_INDEX(orden,’.’,-1),0) FROM temario
order by convert(SUBSTRING_INDEX(orden,’.’,1),signed),convert(if(length(orden)>2,SUBSTRING_INDEX(orden,’.’,-1),0),signed) asc;