我有一个表,其中包含25个技能的列skill1xp、skill1lvl和skill1rank。每天我都为所有用户更新它,所以有一个datetime列。我正在为一款游戏做一个高分的进度跟踪器,对许多用户来说,我只剩下一个功能,那就是某段时间(天/周/月)的最高收益。
我想这是一个沉重的问题,but...how我会这么做吗?
表结构:http://pastebin.com/m5903aa17
发布于 2009-09-25 14:28:24
为了显示“谁在给定时间内赢得了最多的XP ",您需要以至少"X”的粒度存储有多少XP用户获胜。最简单的解决方案几乎肯定是存储XP won和时间戳,给你一个秒的"X“。
create table xprewarded (
track_users_id int(11) NOT NULL,
xpreward int(11) NOT NULL,
rewardtime timestamp NOT NULL DEFAULT NOW()
);要获得在过去一天中赢得最多经验的人:
select
sum(xpreward),
track_users_id
from xprewarded
where rewardtime > now()-86400
group by track_users_id
order by sum(xpreward) desc limit 1;" now ()- 86400“是指定”从现在起,回顾86400秒(或'24小时‘),并返回自那以后创建的任何记录“的过滤器。其他时间段可以用类似的数学方法来完成。
https://stackoverflow.com/questions/1477426
复制相似问题