xenon254,
soy de la opinión de gnzsoloyo: lo mejor, crear una tabla nueva posiciones algo así:
ID posicion
1 portero
2 defensa
3 centrocampista
4 delantero
5 entrenador
En la tabla donde tienes los nombres el campo posicion deberá ser numérico y en él guardarás el valor del ID. Es decir, en el campo posicion de la tabla donde incluyes los nombres, en el registro del portero, deberá aparecer 1.
Luego la consulta la ordenas por ID.
Así estarás usando el id como elemento que te permita ordenar.
También podrías añadir otro campo numérico llamado criterioordenacion, en el que pondrías el número según te interese ordenar. Esto te ofrece algo más de flexibilidad, porque si más adelante se te ocurre introducir nuevas posiciones, mediovolante, y cosas así, te bastará con reordenar esos números de criterioordenacion en la tabla posiciones, algo que te resultaría dificultoso hacer con el id, que es primary key y sirve para establecer las relaciones. Yo en estos casos, salvo que la lista esté completamente cerrada, prefiero esto:
ID posicion criterioordenacion
1 portero 1
2 defensa 2
3 centrocampista 3
4 delantero 5
5 entrenador 6
6 mediovolante 4
y claro, cuando hago la consulta, ordeno por criterioordenacion, algo más flexible y que permite añadir nuevos registros.
En el selector tendrás que hacer que lo seleccionado, el value sea el id, y lo mostrado la posicion, pero eso no te resultará dificil.
Como bien dice gnzsoloyo, hay otras soluciones, como por ejemplo esta:
Código sql:
Ver originalSELECT nombre, posicion,
CASE WHEN posicion = "portero"
THEN 1
WHEN posicion = "defensa"
THEN 2
WHEN posicion = "centrocampista"
THEN 3
WHEN posicion = "delantero"
THEN 4
WHEN posicion = "entrenador"
THEN 5
ELSE 6
END AS orden
FROM tabla
ORDER BY orden, nombre
Pero no te la recomiendo pudiendo hacer lo otro.