Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/01/2013, 13:05
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Query SELECT ORDER según casos

Hola Wolfchamane:

No entiendo muy bien cómo es que quieres ordenar la información... creo que sería conveniente que nos pusieras algunos datos de ejemplo y que nos mostraras cómo esperas la salida... de esta manera tal vez podríamos darte una respuesta puntual. Por lo Pronto se me ocurre que hagas algo como esto, supongamos que tienes más o menos estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +--------+---------+--------+
  3. | indice | boleano | texto  |
  4. +--------+---------+--------+
  5. |      1 |       1 | uno    |
  6. |      3 |       0 | tres   |
  7. |      4 |       1 | cuatro |
  8. |      2 |       1 | dos    |
  9. |      7 |       0 | siete  |
  10. |      9 |       1 | nueve  |
  11. |      8 |       0 | ocho   |
  12. |      6 |       1 | seis   |
  13. |     10 |       0 | diez   |
  14. |      5 |       1 | cinco  |
  15. +--------+---------+--------+
  16. 10 rows in set (0.00 sec)

Ahora bien, si entendí bien qué es lo que quieres hacer es ordenar primero todos aquellos registros que tengan el campo boleano como TRUE, pero estos registros ordenarlos en primer lugar por el índice y después por el texto... en seguida presentar todos los registros que tengan en el campo boleano FALSE, pero estos ordenarlos sólo por el texto... creo que podrías hacerlo más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla
  2.     -> ORDER BY
  3.     -> IF(boleano, indice, 9999999999) , texto;
  4. +--------+---------+--------+
  5. | indice | boleano | texto  |
  6. +--------+---------+--------+
  7. |      1 |       1 | uno    |
  8. |      2 |       1 | dos    |
  9. |      4 |       1 | cuatro |
  10. |      5 |       1 | cinco  |
  11. |      6 |       1 | seis   |
  12. |      9 |       1 | nueve  |
  13. |     10 |       0 | diez   |
  14. |      8 |       0 | ocho   |
  15. |      7 |       0 | siete  |
  16. |      3 |       0 | tres   |
  17. +--------+---------+--------+
  18. 10 rows in set (0.01 sec)

Observa que el 9999999999 es simplemente un número enorme, mayor que cualquier índice, para asegurar que estos se van a presentar al final de la lista... .ls primeros 6 registros están ordenados por ambos campos, indice y texto... los últimos 4 registros sólo están ordenados por el texto...

Dale un vistazo para ver si esto esto te puede servir, y cualquier cosa la comentas en el foro.

Saludos
Leo.