2011-02-26 44 views
0

我正在建立一個網站與積分系統,類似於Stackoverflow;SQL查詢 - 如何在過去24小時內顯示點數?

這是我用來顯示頂級用戶(所有時間)代碼:

SELECT id, username, active, points 
FROM users 
WHERE active='1' 
ORDER BY points DESC 

但我怎麼能顯示在24小時內(也指出)上的用戶?

+0

什麼是24日?日期? – Jonah

+0

你也需要創建'datetime'字段。 – Sarfraz

+1

未經Stack Overflow的同意,您無法創建基於積分系統的網站。 – Shoe

回答

2

你將不得不做出一個特殊的表,將記錄時(以及如何很多)指出用戶收到。

編輯

例如表points

user_id time   awarded_points 
------------------------------------- 
1   1298745681 10 
... 

然後你只問今天榮獲WHERE time > UNIX_TIMESTAMP(CURDATE())或在過去24小時內WHERE time > UNIX_TIMESTAMP()-24*3600點。

使用例:

SELECT u.id, u.username, u.active, SUM(p.awarded_points) AS points 
FROM points AS p 
LEFT JOIN users AS u ON u.id = p.user_id 
WHERE time > UNIX_TIMESTAMP(CURDATE()) 
AND u.active = '1' 
GROUP BY p.user_id 
ORDER BY points DESC 

我還建議增加一個LIMIT的查詢,特別是如果你的網站變得大。

+0

但桌子應該如何? – silviu

+0

@silviu,請參閱編輯答案。我希望沒有typpo;) – Czechnology

+0

非常感謝 – silviu

1

你需要另一個表,其中所有用戶activites /點將被寫
而不是與此表加盟,條件24H

0

添加一個表格記錄每個用戶的接收點,並帶有外鍵關係到用戶表

例如一臺命名爲以下幾列

  • 用戶ID(FK指向用戶表時)
  • datetimeallocated
  • numberofpoints
  • 其他感興趣的列例如分配點數的用戶等

然後您需要查詢此表

SELECT SUM(numberofpoints), userid 
FROM points 
WHERE datetimeallocated >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
GROUP BY userid 
ORDER BY SUM(numberofpoints) DESC 
相關問題