У мене є запит, подібний до цього:
(select @number:=3)
union
(select @number:=2)
union
(select @number:=1)
order by @number ASC
З результатами:
3
2
1
Але мені б хотілося, щоб результати були в порядку зростання:
1
2
3
Як досягти результатів у порядку зростання з таким запитом?
Відповіді:
2 для відповіді № 1Ви можете обернути UNION у підзапит, спробуйте:
SELECT *
FROM(
SELECT @number := 3 AS number
UNION
SELECT @number := 2 AS number
UNION
SELECT @number := 1 AS number) tmp
ORDER BY number;
Ось а SQL Fiddle приклад
Редагувати, щоб пояснити, що відбувається:
У вашому прикладі, MySQL розглядає кожну групу як свій власний запит (тобто, як ви очікуєте, що об'єднання буде працювати), так що це так, якби у вас було три різних запитів, і тільки третій був замовлений.
Отже, виставляючи спільні запити, у вас є один набір результатів, і весь набір результатів є тим, що впорядковується.
0 для відповіді № 2
Це ваш запит:
(select @number:=3)
union
(select @number:=2)
union
(select @number:=1)
order by @number ASC
Твій order by
має константу. це є order by "1"
-- @number
є змінною, а не ім'ям стовпця. Отже, немає замовлення. Необхідно вказати номер як ім'я стовпця:
select 3 as number
union all
select 2
union all
select 1
order by number;
Ви також повинні використовувати union all
замість union
, якщо не потрібно додаткове накладне видалення дублікатів.