Ver Mensaje Individual
  #8 (permalink)  
Antiguo 12/11/2013, 11:10
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: ¿ Hacer un SELECT listando primero los valores superiores a cero ?

Hola davidj:

Para saber cómo funciona el if condicional, puedes colocarlo en el SELECT, checa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT id, descripcion FROM tabla;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    0 | cero        |
  6. |    1 | uno         |
  7. |    2 | dos         |
  8. |    0 | otro cero   |
  9. |    0 | uno más     |
  10. |    3 | tres        |
  11. +------+-------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT id, descripcion, IF(id = 0, 2, 1) orden FROM tabla;
  15. +------+-------------+-------+
  16. | id   | descripcion | orden |
  17. +------+-------------+-------+
  18. |    0 | cero        |     2 |
  19. |    1 | uno         |     1 |
  20. |    2 | dos         |     1 |
  21. |    0 | otro cero   |     2 |
  22. |    0 | uno más     |     2 |
  23. |    3 | tres        |     1 |
  24. +------+-------------+-------+
  25. 6 rows in set (0.00 sec)

Lo que hace el IF es "clasificar" los registros de acuerdo al valor del ID, en el ejemplo se crea una nueva columna llamada "ORDEN" donde observas qué es lo que pasa...

Código:
IF(id = 0, 2, 1)
el IF asigna dos valores posibles: 2 cuando el ID es igual a cero y 1 cuando es distinto... esto sirve para colocar entonces primero los id's distintos de cero y al final los valores iguales a cero... al poner esto:

Código:
...
ORDER BY IF(id = 0, 2, 1), id
lo que indicas es que el primer criterio para ordenar es esta clasificación arbitraria, por eso coloca primero todos los 1's y luego todos los 2's... el segundo criterio es el id en si...

Espero que con esto te quede un poco más claro la lógica de la consulta

Saludos
Leo.