2013-04-04 173 views
0

我想要使用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小時)。請,如果你認爲如果它仍然可以改善,建議我。

+0

您需要每個投票的時間戳。這是在你的數據庫的地方? – 2013-04-04 07:18:31

+0

@MartyMcVry是的。它存儲在另一個名爲'rating'的表中,其中包含時間戳,帖子ID和投票類型的標誌,即1代表upvote,2代表downvote。但我想我應該根據帖子發佈的時間來排序,而不是投票。我錯了嗎? – coder101 2013-04-04 07:24:43

+0

@MartyMcVry好的,讓我來重述一下,我想在過去的24小時內基於票數(意義,最受歡迎的票數)獲得頂級內容。現在考慮這個,你認爲我應該怎麼做?你可以提供一些示例代碼,也許編輯我的查詢,如果它沒有太多要問? – coder101 2013-04-04 07:40:36

回答

1
SELECT *, complex_formula 
FROM posts 
WHERE upvotes + downvotes > 0 
     AND ts BETWEEN UNIX_TIMESTAMP($user_time - INTERVAL 1 DAY) AND UNIX_TIMESTAMP($user_time) 
+0

NOW()將是服務器的當前時間。如果它位於與用戶不同的時區呢?我想使用從用戶計算機獲取的unix時間戳或者ip地址。你可以請編輯,以顯示如何使用真實時間戳代替'NOW()' – coder101 2013-04-04 07:38:22

+0

TS在你的分貝將被記錄爲服務器的時間... – 2013-04-04 07:39:03

+0

@ coder101:以相對論我們的考慮,'NOW()無論時區如何,都意味着「現在」。但是,在這裏,請參閱後期更新。 – Quassnoi 2013-04-04 07:40:22