Я хочу использовать следующий запрос с уверенностью в оценке Уилсона, взятый из как не сортировать по среднему рейтингу, чтобы рассчитать релевантный контент на основе голосов за последние 24 часа с момента поиска пользователем. У меня есть временные метки unix, хранящиеся в поле, но это не тип datetime
.
Теперь запрос:
SELECT p.id, p.post, p.upvotes, p.downvotes, ((upvotes + 1.9208) / (upvotes + downvotes) -
1.96 * SQRT((upvotes * downvotes) / (upvotes + downvotes) + 0.9604) /
(upvotes + downvotes)) / (1 + 3.8416 / (upvotes + downvotes))
AS ci_lower_bound FROM posts p WHERE upvotes + downvotes > 0
ORDER BY ci_lower_bound DESC;
Мне нужно получить самый популярный контент, опубликованный за последние 24 часа. Я знаю, что мне нужно поставить дополнительное WHERE
условие, используя BETWEEN
, но не знаю, как это сделать?
Пожалуйста помоги.
ОБНОВЛЕНИЕ. Основываясь на ответе ниже и некоторых настройках, я сделал что-то вроде этого:
SELECT p.id, p.post, p.upvotes, p.downvotes, ((upvotes + 1.9208) / (upvotes + downvotes) - 1.96 * SQRT((upvotes * downvotes)
/ (upvotes + downvotes) + 0.9604) / (upvotes + downvotes))
/ (1 + 3.8416 / (upvotes + downvotes)) AS ci_lower_bound
FROM posts p WHERE upvotes + downvotes > 0
AND p.unix_timestamp BETWEEN 1363023402 AND 1363109802 ORDER BY ci_lower_bound DESC
Первое значение я рассчитал путем вычитания 86400 секунд (т.е. 24 часа) из текущей метки времени и получил результаты. Пожалуйста, если вы думаете, что его еще можно улучшить, предложите мне.
rating
с отметками времени, идентификатором сообщения и флагом типа голосования, то есть 1 для положительного и 2 для отрицательного голоса. Но я подумал, что должен отсортировать его по времени публикации сообщения, а не по количеству голосов. Я ошибся? - person coder101   schedule 04.04.2013