Hola davidj:
Para saber cómo funciona el if condicional, puedes colocarlo en el SELECT, checa este ejemplo:
Código MySQL:
Ver original+------+-------------+
| id | descripcion |
+------+-------------+
| 0 | cero |
| 1 | uno |
| 2 | dos |
| 0 | otro cero |
| 0 | uno más |
| 3 | tres |
+------+-------------+
mysql
> SELECT id
, descripcion
, IF(id
= 0, 2, 1) orden
FROM tabla
;+------+-------------+-------+
| id | descripcion | orden |
+------+-------------+-------+
| 0 | cero | 2 |
| 1 | uno | 1 |
| 2 | dos | 1 |
| 0 | otro cero | 2 |
| 0 | uno más | 2 |
| 3 | tres | 1 |
+------+-------------+-------+
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...
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.