Войти  Зарегистрироваться


Сортировка записей при использовании оператора UNION

(1 голос, среднее 3.00 из 5)

Данная статья призвана уберечь разработчиков от не совсем очевидной ошибки при составлении SQL-запросов с использованием оператора UNION.

Например, у нас есть 2 таблицы с аудиозаписями (таблица audio) и видеозаписями (таблица video).

video
id_video video_title artist
1 Du Hast 1
2 Links 1
audio
id_audio audio_title artist
1 Sonne 1
2 Angel 1

 

Теперь нам нужно выбрать все произведения одного исполнителя и отсортировать их по названию. Мы будем использовать оператор UNION для объединения двух таблиц.

Вариант первый. В каждом из двух запросов мы будем использовать один алиас для названия и потом будем сортировать записи по этому алиасу.

SELECT `video_title` as `title` FROM `video` WHERE `artist` = 1
UNION 
SELECT `audio_title` as `title` FROM `audio` WHERE `artist` = 1
ORDER BY `title`

Вот какой результат мы получим:

title
Angel
Du Hast
Links
Sonne

Ошибкой будет использовать в конструкции ORDER BY название какой-либо из таблиц.

Вариант второй. Если нужно выбрать больше полей, но не хочется все их перечислять, то мы можем использовать следующий запрос.

SELECT * FROM `video` WHERE `artist` = 1
UNION 
SELECT * FROM `audio` WHERE `artist` = 1
ORDER BY 2

Цифра 2 говорит о том что мы сортируем по второму полю в результирующей таблице.

Получаем:

id_video video_title artist
2 Angel 1
1 Du Hast 1
2 Links 1
1 Sonne 1

 

Комментарии
⇓⇑ Добавить новый Поиск RSS
Имя:
Email:
 
Тема:
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Пожалуйста, введите проверочный код, который Вы видите на картинке.