Hola JeMaGa
Tal como lo mencionó gnzsoloyo, el problema es porque no es lo mismo ordenar una cadena que contiene números a ordenar un número... observa este ejemplo
Código MySQL:
Ver original+--------+
| campo |
+--------+
| 10-1 |
| 10-10 |
| 10-100 |
| 10-111 |
| 10-2 |
| 10-3 |
+--------+
Si bien la solución que planteas puede servirte, NO ES LA MEJOR OPCIÓN.
Esto puede traerte muchos problemas... por un lado, nadie te asegura que siempre puedas realizar la conversión, es decir, imagina que almacenas letras o caracteres especiales... esto es por lo que NO DEBES UTILIZAR CAMPOS VARCHAR PARA ALMACENAR ESTE TIPO DE CAMPOS...
El Guión que mencionas NO SIRVE ABSOLUTAMENTE PARA NADA... lo ideal es que tuvieras dos campos, uno con la primer parte de tu cadena y otro con la segunda parte... si necesitas presentar el GUION al usuario, simplemente haces esto:
Código MySQL:
Ver original+--------+--------+
| campo1 | campo2 |
+--------+--------+
| 10 | 1 |
| ab | def |
| 10 | 3 |
| 10 | 10 |
| 10 | 111 |
| 10 | 100 |
+--------+--------+
+-----------------------------+
| CONCAT(campo1
, '-', campo2
) | +-----------------------------+
| 10-1 |
| ab-def |
| 10-3 |
| 10-10 |
| 10-111 |
| 10-100 |
+-----------------------------+
Saludos
Leo.