Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/07/2011, 02:35
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
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