Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con UNION y ORDER BY

Estas en el tema de Problema con UNION y ORDER BY en el foro de Mysql en Foros del Web. Hola amigos tengo dos tablas una de articulos y otra de marcas, realizo la siguiente consulta Código: ( SELECT a.nombre, m.marca, a.oferta FROM articulos a ...
  #1 (permalink)  
Antiguo 26/07/2010, 10:57
 
Fecha de Ingreso: abril-2003
Ubicación: Malaga
Mensajes: 176
Antigüedad: 21 años
Puntos: 1
Problema con UNION y ORDER BY

Hola amigos tengo dos tablas una de articulos y otra de marcas, realizo la siguiente consulta

Código:
 (
SELECT a.nombre, m.marca, a.oferta
FROM articulos a
LEFT JOIN marcas m ON m.id = a.id_marca
WHERE a.id_marca =22
AND a.id_fam =162
ORDER BY a.oferta DESC
)
UNION (

SELECT a.nombre, m.marca, a.oferta
FROM articulos a
LEFT JOIN marcas m ON m.id = a.id_marca
WHERE a.id_marca <>22
AND a.id_fam =162
ORDER BY m.marca ASC
)
Pero no consigo que me ordene los primeros por precio y el resto por marca alfabeticamente.

Se pueden hacer en Mysql 5 las ordenaciones por separado?

Muchas gracias por anticipado
  #2 (permalink)  
Antiguo 26/07/2010, 12:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con UNION y ORDER BY

Te equivocas al usar LEFT JOIN y UNION en este caso, pues el LEFT JOIN te ofrece todos los de la tabla, y el UNION evita las repeticiones, con lo que sólo tendrás datos del primer select
usa INNER JOIN en lugar de LEFT JOIN en ambas consultas, y haz una UNION ALL, en lugar de UNION. A ver si así.
  #3 (permalink)  
Antiguo 26/07/2010, 16:04
 
Fecha de Ingreso: abril-2003
Ubicación: Malaga
Mensajes: 176
Antigüedad: 21 años
Puntos: 1
Respuesta: Problema con UNION y ORDER BY

Cita:
Iniciado por jurena Ver Mensaje
Te equivocas al usar LEFT JOIN y UNION en este caso, pues el LEFT JOIN te ofrece todos los de la tabla, y el UNION evita las repeticiones, con lo que sólo tendrás datos del primer select
usa INNER JOIN en lugar de LEFT JOIN en ambas consultas, y haz una UNION ALL, en lugar de UNION. A ver si así.
ok lo pruebo y te digo
  #4 (permalink)  
Antiguo 26/07/2010, 16:09
 
Fecha de Ingreso: abril-2003
Ubicación: Malaga
Mensajes: 176
Antigüedad: 21 años
Puntos: 1
Respuesta: Problema con UNION y ORDER BY

Nada sigue sin ordenar como yo quiero

Gracias de todas maneras
  #5 (permalink)  
Antiguo 26/07/2010, 19:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con UNION y ORDER BY

El último ORDER BY de un UNION o UNION ALL opera sobre todo el conjunto. Así es como funciona.
Para que no te lo ordene todo junto los bloques de ordenamiento deben estar completamente aislados, dentro de una subconsulta:
Código MySQL:
Ver original
  1. FROM  
  2.    (SELECT a.nombre, m.marca, a.oferta
  3.    FROM articulos a  LEFT JOIN marcas m ON m.id = a.id_marca
  4.    WHERE a.id_marca =22 AND a.id_fam =162
  5.    ORDER BY a.oferta DESC) T1
  6.    (SELECT a.nombre, m.marca, a.oferta
  7.    FROM articulos a LEFT JOIN marcas m ON m.id = a.id_marca
  8.    WHERE a.id_marca <>22 AND a.id_fam =162
  9.    ORDER BY m.marca ASC) t2;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 27/07/2010, 02:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con UNION y ORDER BY

Lo que parece decir el manual es que sin LIMIT la ordenación la hace el programa (pongo 100, pero podrías aumentar si sospechas que el número es mayor).
Como te sugiere gnzsoloyo, con subconsultas, funcionará, y también con un limit que abarque lo que buscas
Código MySQL:
Ver original
  1. (
  2. SELECT a.nombre, m.marca, a.oferta
  3. FROM articulos a
  4. INNER JOIN marcas m ON m.id = a.id_marca
  5. WHERE a.id_marca =22
  6. AND a.id_fam =162
  7. ORDER BY a.oferta DESC LIMIT 100
  8. )
  9.  
  10. SELECT a.nombre, m.marca, a.oferta
  11. FROM articulos a
  12. INNER marcas m ON m.id = a.id_marca
  13. WHERE a.id_marca <>22
  14. AND a.id_fam =162
  15. ORDER BY m.marca ASC LIMIT 100
  16. )

Etiquetas: order, union
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:20.