Sql-запрос для упорядочивания данных, отсортированных по ранжированию, но умноженных на то, как давно они были опубликованы

#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.