我正在使用积分系统构建一个网站,类似于Stackoverflow;
这是我用来显示热门用户的代码(所有时间):
SELECT id, username, active, points
FROM users
WHERE active='1'
ORDER BY points DESC
但是如何在24小时内显示最高用户(也是积分)?
答案 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的表,其中包含以下列
然后您需要查询此表,例如
SELECT SUM(numberofpoints), userid
FROM points
WHERE datetimeallocated >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY userid
ORDER BY SUM(numberofpoints) DESC