#mysql #sql
#mysql #sql
Вопрос:
У меня есть лента статей, которые в настоящее время ранжируются по «голосам» в SQL-запросе. Я хотел бы учесть количество времени с момента публикации, чтобы придать больший вес недавним статьям.
SELECT *
FROM articles
WHERE date >= DATE_SUB(NOW(),INTERVAL 24 HOUR)
ORDER BY (votes * (720/#####)) DESC
LIMIT 100
Что я могу поставить вместо «#####», чтобы вернуть количество времени (в минутах) с момента публикации статьи?
Следовательно, статья с 1 голосом, опубликованная 10 минут назад, будет равна 72 (1 * 720/10) … и рейтинг ниже статьи с 10 голосами, но опубликованной 60 минут назад, равный 120 (10 * 720/60)
Ответ №1:
Предполагая date
, что это опубликованный день, вы можете использовать timestampdiff()
:
SELECT *
FROM articles
WHERE date >= DATE_SUB(NOW(),INTERVAL 24 HOUR)
ORDER BY votes * (720/TIMESTAMPDIFF(minute, date, NOW())) DESC
LIMIT 100
Комментарии:
1. при попытке этого я получаю следующую ошибку: у вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘DESC LIMIT 100’ в строке 1
2. Теперь я это вижу. Нужна еще одна скобка перед «DESC». Спасибо за решение!
3. @banjax … Или на один меньше раньше. Я удалил первый открытый paren.