所以我有一个结构如下的 MySQL 表:
CREATE TABLE `spenttime` {
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL,
`serverid` int(11) NOT NULL,
`time` int(11) NOT NULL,
`day` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `dbid_sid_day` (`userid`,`serverid`,`day`)
}
我存储每个注册玩家每天在我的游戏服务器上花费的时间。time
是花费的时间,以秒为单位,day
是每天的 unix 时间戳(一天的开始)。我想在我的数据库上创建一个视图,该视图将显示每个用户每周在服务器上花费的时间,但有一列显示该时间的排名,每周对每个服务器都是独立的。例如数据(为了澄清,我将day
在此示例中使用日期格式 YMD 而不是 unix 时间戳作为列):
INSERT INTO `spenttime` (`userid`, `serverid`, `time`, `day`) VALUES
(1, 1, 200, '2013-04-01'),
(1, 1, 150, '2013-04-02'),
(2, 1, 100, '2013-04-02'),
(3, 1, 500, '2013-04-04'),
(2, 2, 400, '2013-04-04'),
(1, 1, 300, '2013-04-08'),
(3, 1, 200, '2013-04-08');
对于 viev 命名的数据spenttime_week
应该出现:
+--------+----------+--------+------------+------+
| userid | serverid | time | yearweek | rank |
+--------+----------+--------+------------+------+
| 1 | 1 | 350 | '2013-W14' | 2 |
| 2 | 1 | 100 | '2013-W14' | 3 |
| 3 | 1 | 500 | '2013-W14' | 1 |
| 2 | 2 | 400 | '2013-W14' | 1 |
| 1 | 1 | 300 | '2013-W15' | 1 |
| 3 | 1 | 200 | '2013-W15' | 2 |
+--------+----------+--------+------------+------+
我知道如何生成没有排名的视图,我只有排名列的问题......我怎样才能做到这一点?
//edit Additionaly,此列必须出现在 viev 中,我无法从该视图中生成它,因为我将使用它的应用程序不允许...