2011-02-26 11 views
0

私はStackoverflowに似た、ポイントシステムでウェブサイトを構築しています。SQLクエリ - 過去24時間にポイントを表示する方法は?

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

しかしがどのように私は24時間(も指す)でトップのユーザーを表示することができます。

これは私が(すべての時間のための)トップのユーザーを表示するために使用しているコードはありますか?

+0

What's 24th?日付? – Jonah

+0

'datetime'フィールドも作成する必要があります。 – Sarfraz

+1

スタックオーバーフローの同意なしにポイントシステムベースのウェブサイトを作成することはできません。 – Shoe

答えて

2

を24時間営業する場所あなたが(そしてどのように計上する特別なテーブルを作成する必要があります多くの)ポイントをユーザーが受け取った。

EDIT例えば

テーブル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

@シルヴィア、編集された答えを見てください。私はタイポがないことを願っています;) – Czechnology

+0

ありがとう – silviu

1

あなたのニーズ別のテーブル、すべてのユーザーのactivites /ポイントは
そして、このテーブルと結合よりを書くことになる、との条件

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 
関連する問題