Operator UNION
wykonuje sortowanie domniemane w ramach operacji związania (IIRC, w kolumnie (kolumnach) klucza).
Jeśli chcesz, aby inne sortowanie było wynikiem, musisz zastosować ORDER BY
do wybranej kombinacji.
W twoim przypadku potrzebujesz sposobu na rozróżnienie pierwszego wyboru od drugiego, abyś mógł prawidłowo zamówić związek. Coś podobnego (niesprawdzone):
(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
Problem z tego podejścia jest to, że będziesz mieć duplikaty dla trzech wierszy wybranych jako część pierwszego zapytania w UNION
(ponieważ kolumny nie zupełnie pasuje).
Czy na pewno nie można zamiast tego używać dwóch numerów: SELECT
?
See [UNION Składnia] (http://dev.mysql.com/doc/refman/5.0/en/union.html) . Poszukaj "użycia ORDER BY dla poszczególnych instrukcji SELECT nie implikuje niczego w zamówieniu". Zobacz także [this SO post] (http://stackoverflow.com/questions/3163503/sorting-union-queries-in-mysql/3163526#3163526). – Mike
Wow, zadziałało ... ale jak to działa? mmm .. jestem trochę zdezorientowany ..! – stighy