Предложение объединения MySQL с двумя предложениями ORDER BY

#mysql #sql-order-by #union #fetch

#mysql #sql-order-by #объединение #выборка

Вопрос:

вот проблема, мне нужно извлечь строки из моей таблицы, где дата создания меньше 24 часов назад, и УПОРЯДОЧИТЬ их по лайкам, а затем объединить их с остальными строками в той же таблице, но я хочу, чтобы остальные строки были упорядочены по дате создания. другими словами, мне нужно отдельное предложение ORDER BY для каждого ВЫБОРА. чтобы было более понятно, это что-то вроде этого:

 SELECT * 
FROM (SELECT * 
      FROM 'table' 
      WHERE 'date_created' > timestampadd(hour, -24, now()) 
      ORDER BY 'likes' DESC 
      UNION 
      SELECT * 
      FROM 'table' 
      WHERE 
      ORDER BY date_created DESC ) AS Results 
LIMIT 10 OFFSET 0
  

спасибо за это потрясающее сообщество 🙂

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

1. Во втором подзапросе отсутствует WHERE условие.

2. Вы также используете неправильные типы кавычек вокруг имен таблиц и столбцов. Они должны быть обратными — одинарные кавычки создают литеральные строки.

Ответ №1:

Попробуйте это:

 SELECT *, (date_created > timestampadd(hour, -24, now()) AS recent
FROM table
ORDER BY recent DESC, IF(recent, likes, 0) DESC, IF(!recent, date_created, 0) DESC
LIMIT 10 OFFSET 0