SQL查询 - 如何在过去24小时内显示点数?

时间:2011-02-26 17:34:28

标签: php mysql

我正在使用积分系统构建一个网站,类似于Stackoverflow;

这是我用来显示热门用户的代码(所有时间):

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

但是如何在24小时内显示最高用户(也是积分)?

3 个答案:

答案 0 :(得分:2)

你必须制作一个特殊的表来记录用户收到的点数(以及多少点)。

修改

E.g。表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,特别是如果您的网站变大了。

答案 1 :(得分:1)

您需要另一张桌子,所有用户的活动/点数都会写入 然后加入这个表,条件到24h

答案 2 :(得分:0)

添加一个表格,记录每个用户收到的点数以及何时与用户表格的外键关系

例如,一个名为points的表,其中包含以下列

  • userid(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