Комментарии 15
engine != энджайн
0
товарищи минусовщики мне не ваш вердикт нравится не нравится нужен, а обсуждение найденной проблемы. Чем вызвана? с чем связанно? чего еще ждать?
0
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
а еще лучше, вместе со своим другом, почитайте книжки по реляционной алгебре.
+4
за что минусуют?
1. за оформление статьи:
— не было ката (уже есть)
— общее оформление статьи, надписи типа:
«* This source code was highlighted with Source Code Highlighter» по пару раз подряд
— можно было бы и убрать нумерацию строк для кода — копипастить неудобно, да и для текстов в 5-10 строк это не очень-то и актуально
2. за фактические ошибки: SELECT ……… FROM `k1`
3. за примитивность проблемы. лично по мне то спорный пункт, пусть и другие учатся на ошибках.
но уже п.1-2 производят неважнецкое впечатление вот и тянется рука нажать стрелочку :)
ЗЫ. Я то лично плюсанул, согласно моему же п.3
1. за оформление статьи:
— не было ката (уже есть)
— общее оформление статьи, надписи типа:
«* This source code was highlighted with Source Code Highlighter» по пару раз подряд
— можно было бы и убрать нумерацию строк для кода — копипастить неудобно, да и для текстов в 5-10 строк это не очень-то и актуально
2. за фактические ошибки: SELECT ……… FROM `k1`
3. за примитивность проблемы. лично по мне то спорный пункт, пусть и другие учатся на ошибках.
но уже п.1-2 производят неважнецкое впечатление вот и тянется рука нажать стрелочку :)
ЗЫ. Я то лично плюсанул, согласно моему же п.3
0
Порыл сейчас спецификацию и не нашёл где написано, что UNION помимо объединения результатов гарантирует какой-либо их порядок. Так что формально первоначальные сортировки — по барабану.
Сортировать нужно результат, а не промежуточные данные.
Сортировать нужно результат, а не промежуточные данные.
+1
> FROM `k1`
это опечатка я так понимаю? тут должно быть t1?
это опечатка я так понимаю? тут должно быть t1?
0
Автор!!!
(
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. Он просто выполняет запросы по очереди и в порядке следования запросов просто вносит полученные данные в новый результат.
(
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. Он просто выполняет запросы по очереди и в порядке следования запросов просто вносит полученные данные в новый результат.
0
Ну а где собственно решение? Во второй табличке:
2726 1.50194 13
88207 0.25084 13 <====
49207 1.92928 17
2726 1.50194 13
88207 0.25084 13 <====
49207 1.92928 17
+1
Решение в этом посте: developer.habrahabr.ru/blog/65874/#comment_1847652
0
все верно — результирующий набор нужно сортировать отдельно
(
SELECT *, 1 AS union_order
FROM…
WHERE…
) UNION (
SELECT *, 2 AS union_order
FROM…
WHERE…
)
ORDER BY `union_order` DESC
(
SELECT *, 1 AS union_order
FROM…
WHERE…
) UNION (
SELECT *, 2 AS union_order
FROM…
WHERE…
)
ORDER BY `union_order` DESC
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Сортировке внутри Union