я хотел бы добраться от единственной таблицы, всех строк, но заказать им по-разному. Например, я пишу
(SELECT * FROM table1
ORDER BY fieldA ASC LIMIT 3
)
UNION
(
SELECT * FROM table1
ORDER BY FieldB DESC
)
Это работает, кроме этого, второй порядок (FIELDB DESC) проигнорирован... Кто-то знает Почему?Спасибо
Оператор UNION
выполняет подразумеваемую сортировку как часть операции объединения (IIRC, по ключевому столбцу(ам)).
Если вам нужна другая сортировка в результате, вы должны применить ORDER BY
к объединенной выборке.
В вашем случае вам нужно каким-то образом отличить первый выбор от второго, чтобы правильно упорядочить объединение. Что-то вроде (не проверено):
(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
Проблема этого подхода в том, что у вас будут дубликаты для трех строк, выбранных как часть первого запроса в UNION
(поскольку столбцы не полностью совпадают).
Вы уверены, что не можете использовать два SELECT
?