El ORDER BY admite que cada campo indicado tenga una forma de ordenamiento diferente:
Supongamos:
Código sql:
Ver originalSELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
FROM producto LEFT JOIN descuentos USING(producto_id)
ORDER BY precio ASC, descuento DESC;
Esto ordena la lista de productos por precio en forma ascendente, y por descuento en forma descendente.
En general, esta forma es ineficiente en un listado de precios, porque como cada producto aparece solamente una vez, la segunda condición de ordenamiento sólo operará en los productos que tengan el mismo precio.
Si quieres ordenar por descuento primero y por precio después, entonces será:
Código sql:
Ver originalSELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
FROM producto LEFT JOIN descuentos USING(producto_id)
ORDER BY descuento DESC, precio ASC;
Quitarle las cláusulas de forma de ordenamiento, hace que se ordenen en forma ascendente:
Código sql:
Ver originalSELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
FROM producto LEFT JOIN descuentos USING(producto_id)
ORDER BY descuento, precio;
El IFNULL() pondrá ceros donde la relación entre producto y descuento de NULL.
¿Te sirve la idea?