Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/06/2009, 15:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: ordenar por precio ascendente y descendente

El ORDER BY admite que cada campo indicado tenga una forma de ordenamiento diferente:
Supongamos:
Código sql:
Ver original
  1. SELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
  2. FROM producto LEFT JOIN descuentos USING(producto_id)
  3. 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 original
  1. SELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
  2. FROM producto LEFT JOIN descuentos USING(producto_id)
  3. 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 original
  1. SELECT producto_id, descripcio, precio, IFNULL(descuento,0) descuento
  2. FROM producto LEFT JOIN descuentos USING(producto_id)
  3. ORDER BY descuento, precio;

El IFNULL() pondrá ceros donde la relación entre producto y descuento de NULL.
¿Te sirve la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)