Hola srpiramo:
Si entendí correctamente lo que quieres hacer es ordenar por el campo uno_id, siempre y cuando el valor sea distinto de nulo, pero en caso de que sea nulo, entonces ordenar por el campo dos_id... Esto quiere decir que primero debes determinar si el campo uno_id es nulo o no y hacer una ordenación condicional.
La consulta podría quedar así:
Código MySQL:
Ver original -> tabla1.uno_id,
-> tabla1.uno_nombre,
-> tabla2.dos_id,
-> tabla2.dos_nombre,
-> tabla2.dos_empresa,
-> tabla2.dos_cargo
-> LEFT JOIN tabla2
ON tabla1.uno_id
= tabla2.dos_id
-> tabla1.uno_id,
-> tabla1.uno_nombre,
-> tabla2.dos_id,
-> tabla2.dos_nombre,
-> tabla2.dos_empresa,
-> tabla2.dos_cargo
-> ON tabla1.uno_id
= tabla2.dos_id
+--------+------------+--------+------------+-------------+-----------+
| uno_id | uno_nombre | dos_id | dos_nombre | dos_empresa | dos_cargo |
+--------+------------+--------+------------+-------------+-----------+
| 1 | Marcial | 1 | Marcial | Mercado | Gerente |
| NULL | NULL | 2 | Carlos
| Zapateria
| Peon
| +--------+------------+--------+------------+-------------+-----------+
Observa que al poner un IF en el ORDER BY se realiza una pregunta antes de ordenar... Quizás quede más claro si observas cómo trabaja el IF cuando se pone en el SELECT:
Código MySQL:
Ver original -> tabla1.uno_id,
-> tabla2.dos_id,
-> IF(tabla1.uno_id
IS NOT NULL, tabla1.uno_id
, tabla2.dos_id
) orden
-> LEFT JOIN tabla2
ON tabla1.uno_id
= tabla2.dos_id
-> tabla1.uno_id,
-> tabla2.dos_id,
-> IF(tabla1.uno_id
IS NOT NULL, tabla1.uno_id
, tabla2.dos_id
) orden
-> ON tabla1.uno_id
= tabla2.dos_id
+--------+--------+-------+
| uno_id | dos_id | orden |
+--------+--------+-------+
| 1 | 1 | 1 |
+--------+--------+-------+
Observa que el campo calculado ORDEN va tomando el id correspondiente de acuerdo a la condición que colocas en el IF... Dale un vistazo para ver si esto es lo que necesitas.
Saludos
Leo