Как стать автором
Обновить

Комментарии 15

исправил
товарищи минусовщики мне не ваш вердикт нравится не нравится нужен, а обсуждение найденной проблемы. Чем вызвана? с чем связанно? чего еще ждать?
RTFM!
Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows

а еще лучше, вместе со своим другом, почитайте книжки по реляционной алгебре.
да, все верно — благодарю, вопрос решен. А почитать — это всегда полезно.
за что минусуют?
1. за оформление статьи:
— не было ката (уже есть)
— общее оформление статьи, надписи типа:
«* This source code was highlighted with Source Code Highlighter» по пару раз подряд
— можно было бы и убрать нумерацию строк для кода — копипастить неудобно, да и для текстов в 5-10 строк это не очень-то и актуально

2. за фактические ошибки: SELECT ……… FROM `k1`

3. за примитивность проблемы. лично по мне то спорный пункт, пусть и другие учатся на ошибках.

но уже п.1-2 производят неважнецкое впечатление вот и тянется рука нажать стрелочку :)

ЗЫ. Я то лично плюсанул, согласно моему же п.3
да не суть спасб конечно за разъяснения, но я щас повисит и к себе в личные утащую
Порыл сейчас спецификацию и не нашёл где написано, что UNION помимо объединения результатов гарантирует какой-либо их порядок. Так что формально первоначальные сортировки — по барабану.

Сортировать нужно результат, а не промежуточные данные.
> FROM `k1`

это опечатка я так понимаю? тут должно быть t1?
да, конечно.
Автор!!!

(
SELECT `id1`, `k1`, `k2`
FROM `t1`
WHERE `id2`=3 AND `k2`=13
) UNION (
SELECT `id1`, `k1`, `k2`
FROM `k1`
WHERE `id2`=3 AND `k2`!=13
)
ORDER BY `k1` DESC

Это как бы даже не в мануале надо читать, а просто нужно понимать как работает union. Он просто выполняет запросы по очереди и в порядке следования запросов просто вносит полученные данные в новый результат.
да ясно — еще раз благодарю.
Ну а где собственно решение? Во второй табличке:

2726 1.50194 13
88207 0.25084 13 <====
49207 1.92928 17
все верно — результирующий набор нужно сортировать отдельно

(
SELECT *, 1 AS union_order
FROM…
WHERE…
) UNION (
SELECT *, 2 AS union_order
FROM…
WHERE…
)
ORDER BY `union_order` DESC
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории