#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