El operador UNION
realiza un tipo implícito como parte de la operación de unión (IIRC, en la (s) columna (s) de la clave).
Si desea otra clasificación en el resultado, debe aplicar un ORDER BY
a la selección de unión.
En su caso, necesita alguna manera de distinguir entre la primera selección y la segunda, para que pueda ordenar la unión correctamente. Algo así como (no probado):
(SELECT table1.*, 0 AS TMP_ORDER FROM table1 ORDER BY fieldA ASC LIMIT 3)
UNION
(SELECT table1.*, 1 AS TMP_ORDER FROM table1)
ORDER BY TMP_ORDER ASC,
CASE WHEN TMP_ORDER = 0 THEN fieldA ELSE 0 END ASC,
CASE WHEN TMP_ORDER = 1 THEN fieldB ELSE 0 END DESC
El problema con este enfoque es que usted tendrá duplicados para las tres filas seleccionadas como parte de la primera consulta en el UNION
(ya que las columnas no coinciden totalmente).
¿Estás seguro de que no puedes usar dos estatutos SELECT
en su lugar?
Ver [UNION Sintaxis] (http://dev.mysql.com/doc/refman/5.0/en/union.html) . Busque 'uso de ORDER BY para declaraciones individuales SELECT no implica nada sobre el orden'. Ver también [esta publicación SO] (http://stackoverflow.com/questions/3163503/sorting-union-queries-in-mysql/3163526#3163526). – Mike
guau, funcionó ... pero ¿cómo puede funcionar? mmm .. estoy un poco confundido ..! – stighy