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

Problema con union all orden incorrecto

Estas en el tema de Problema con union all orden incorrecto en el foro de Mysql en Foros del Web. Hola amigos dle foro, espero me puedan ayudar con mi problema, necesito mostrar registros ordenados por Fecha, utilizo esta sentencia: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver ...
  #1 (permalink)  
Antiguo 16/07/2011, 22:22
Avatar de DjMiki  
Fecha de Ingreso: octubre-2007
Ubicación: Paijan - Trujillo - La Libertad
Mensajes: 90
Antigüedad: 16 años, 9 meses
Puntos: 2
Exclamación Problema con union all orden incorrecto

Hola amigos dle foro, espero me puedan ayudar con mi problema, necesito mostrar registros ordenados por Fecha, utilizo esta sentencia:
Código MySQL:
Ver original
  1. (SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt FROM ust_fechevent WHERE fech_fechevnt>NOW() ORDER BY fech_fechevnt) UNION ALL (SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt FROM ust_fechevent WHERE fech_fechevnt<NOW() ORDER BY fech_fechevnt)

Como pueden darse cuenta utilizo la clausula UNION ALL, en el primer SELECT meustro los registros mayores al actual, como para mostrar los eventos mas cercanos y en el segundo pues los que ya pasaron, pero no e muestra como deberia, ya que yo lo ordeno por fecha ASCENDENTE, bueno eh aqui le smeustro una imagen de el resultado


Los dos primeros resultados pertenecen a el primer Select, y el resto al Segundo, ahora fijense a los ultimos registros, pertenecen a Marzo y se meustra al final cuando deberia mostrar antes.... espero me ayan entendido y me puedan ayudar, gracias.
  #2 (permalink)  
Antiguo 17/07/2011, 04:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 3 meses
Puntos: 300
Respuesta: Problema con union all orden incorrecto

Código MySQL:
Ver original
  1. (SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  2.  FROM ust_fechevent
  3.  WHERE fech_fechevnt>NOW())
  4.  (SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  5.  FROM ust_fechevent
  6.  WHERE fech_fechevnt<NOW())
  7.  ORDER BY  fech_fechevnt
  #3 (permalink)  
Antiguo 19/07/2011, 14:02
Avatar de DjMiki  
Fecha de Ingreso: octubre-2007
Ubicación: Paijan - Trujillo - La Libertad
Mensajes: 90
Antigüedad: 16 años, 9 meses
Puntos: 2
Exclamación No es la forma

Hola JURENA pero creo que no me entendiste lo que yo necesito, bueno repito, necesito que EL PRIMERO SELECT mueste las fechas de ahora en adelante es decir hasta diciembre y el SEGUNDO SELECT muestre desde, por ejm., ayer hasta ENERO, osea asi en este orden:
-------------------
PRIMER SELECT
JULIO
AGOSTO
SETIEMBRE
............
DICIEMBRE
-------------------
SEGUNDO SELECT
ENERO
FEBRERO
MARZO
..........
JUNIO
-------------------


SPERO ME AYAN ENTENDIDO Y QUE PUEDAN AYUDARME PORFAVOR.
  #4 (permalink)  
Antiguo 20/07/2011, 02:35
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 4 meses
Puntos: 574
Respuesta: Problema con union all orden incorrecto

Analicemos tu query

Código MySQL:
Ver original
  1. SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  2.  FROM ust_fechevent
  3.  WHERE fech_fechevnt>NOW())
  4.  (SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  5.  FROM ust_fechevent
  6.  WHERE fech_fechevnt<NOW()

Es equivalente a

Código MySQL:
Ver original
  1. SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  2.  FROM ust_fechevent
  3.  WHERE fech_fechevnt>NOW() or fech_fechevnt<NOW()

y a

Código MySQL:
Ver original
  1. SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
  2.  FROM ust_fechevent
  3.  WHERE fech_fechevnt<>NOW()


El primer select da los registros donde fech_fechevnt es anterior a ahora y el segundo los que es posterior a ahora luego son todos los registros distintos a ahora. No? Practicamente todos, puesto que NOW() es DATETIME con lo que dificilmente tendras un registro en el mismo segundo.

El analizador de querys del motor MySQL que no es tonto busca la query mas sencilla ...

No se que quieres conseguir con el UNION, en qualquier caso la unica forma de ordenar un UNION es la que te ha dicho jurena.

Si lo que quieres es ordenar de forma distinta un select y otro debes trabajarlos por separado, no se con que estas trabajando pero por ejemplo en php podrias lanzar el primero

SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
FROM ust_fechevent
WHERE fech_fechevnt>NOW())
ORDER BY fech_fechevnt ASC;

y lo cargas en un array.

Luego ejecutas el segundo

SELECT fech_fechevnt,desc_fechevnt,tit_fechevnt
FROM ust_fechevent
WHERE fech_fechevnt<NOW())
ORDER BY fech_fechevnt DESC;


y lo cargas en el mismo array. (array_push)

Finalmente recorres el array para generar la lista de salida.

Código PHP:
Ver original
  1. $listado=array()
  2. $result = mysql_query("TU PRIMER QUERY");
  3.  
  4. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  5.    array_push($listado,$row);  
  6. }
  7. $result = mysql_query("TU SEGUNDO QUERY");
  8.  
  9. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
  10.    array_push($listado,$row);  
  11. }

En $listado tines los registros en el orden que querias....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 21/07/2011 a las 00:38
  #5 (permalink)  
Antiguo 21/07/2011, 17:08
Avatar de DjMiki  
Fecha de Ingreso: octubre-2007
Ubicación: Paijan - Trujillo - La Libertad
Mensajes: 90
Antigüedad: 16 años, 9 meses
Puntos: 2
Pregunta Respuesta: Problema con union all orden incorrecto

hola QUIMFV gracias por tu respuesta, y tu sugerencia la habia ya pensado antes de postear este tema/problema, por el hecho de que queria ahorrarme tiempo y código ya que lo que yo utilizo el phppaging para paginar y ese hace el trabajo, y tambien se que trabaja con arrays. Nuevamente repito, quise hacer lo mas rapido posible ahora creo que mi CONSULTA SQL esta muy simple y clara de entender, para lo que yo deseo y es lo que expongo en los posts 1° y 3°, pero lamentablemente no puedo lograr esto debido al problema que se presenta con respecto a el orden de los registros, y si trabajo con php, espero alguien me pueda dar alguna sugerencia mas sobre como mejorar esa consulta, a ti QUIMFV, muchas gracias por tu sugerencia.

Etiquetas: clausula, incorrecto, orden, 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 21:31.