Как отсортировать запрос с UNION?

У меня есть UNION запрос:

SELECT * FROM `rsi` WHERE `tf`='4h' UNION SELECT * FROM `rsi` WHERE `tf`='15m' UNION SELECT * FROM `rsi` WHERE `tf`='4h' UNION SELECT * FROM `rsi` WHERE `situation`='perek' AND `tf`='1d' UNION SELECT * FROM `rsi` UNION SELECT * FROM `levels` WHERE `situation`='support' AND `tf`='4h' UNION SELECT * FROM `levels` WHERE `tf`='1h' ORDER BY `time` DESC LIMIT 0,20

В каждой из таблиц есть поле time, я хочу отсортировать в порядке убывания все эти записи по столбцу time, получаю ошибку:

#1054 - Неизвестный столбец 'time' в 'order clause'

Как правильно отсортировать запрос по столбцу time?
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Если отформатировать запрос, то он выглядит так:
SELECT * FROM `rsi` WHERE `tf`='4h'                         UNION 
SELECT * FROM `rsi` WHERE `tf`='15m'                        UNION 
SELECT * FROM `rsi` WHERE `tf`='4h'                         UNION 
SELECT * FROM `rsi` WHERE `situation`='perek' AND `tf`='1d' UNION 
SELECT * FROM `rsi`                                         UNION 

SELECT * FROM `levels` WHERE `situation`='support' AND `tf`='4h' UNION 
SELECT * FROM `levels` WHERE `tf`='1h' 

ORDER BY `time` DESC LIMIT 0,20

Сразу видно, что первые 4 подзапроса можно смело удалить.
А потом надо смотреть на структуру таблицы rsi, ибо именно из неё будут взяты имена полей объединённого набора записей. Судя по ошибке, там просто нет поля time.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы