我想要使用Wilson Score Confidence中從how to not sort by average rating獲取的以下查詢來計算基於用戶搜索時間過去24小時內的投票的相關內容。我有unix時間戳存儲在一個字段,但它不是datetime
類型。mysql在兩個unix時間戳之間提取數據
現在查詢是:
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小時內最高的內容。我知道我需要使用BETWEEN
額外WHERE
條件,但不知道如何?
請幫忙。
UPDATE基於下面的答案和一些調整,我做了這樣的事情:
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小時)。請,如果你認爲如果它仍然可以改善,建議我。
您需要每個投票的時間戳。這是在你的數據庫的地方? – 2013-04-04 07:18:31
@MartyMcVry是的。它存儲在另一個名爲'rating'的表中,其中包含時間戳,帖子ID和投票類型的標誌,即1代表upvote,2代表downvote。但我想我應該根據帖子發佈的時間來排序,而不是投票。我錯了嗎? – coder101 2013-04-04 07:24:43
@MartyMcVry好的,讓我來重述一下,我想在過去的24小時內基於票數(意義,最受歡迎的票數)獲得頂級內容。現在考慮這個,你認爲我應該怎麼做?你可以提供一些示例代碼,也許編輯我的查詢,如果它沒有太多要問? – coder101 2013-04-04 07:40:36