嗯。我真的不知道通过我构建表格的方式是否可以实现我想要的。让我解释一下。
我得到了这张 table
CREATE TABLE `kill_log` (
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`killer_cid` int(11) NOT NULL,
`killed_cid` int(11) NOT NULL,
`map` varchar(25) NOT NULL DEFAULT '',
KEY `killer_cid` (`killer_cid`),
KEY `killed_cid` (`killed_cid`)
)
当有人在游戏中杀死某人时,它会被记录下来,在每个月的月底,我需要通过计算杀死了多少人以及他被杀死了多少次来计算获胜者。
我试着用组建立一个查询,但我不知道如何计算他被杀了多少次..
SELECT killer_cid as char_id, count(killer_cid) as kills
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC
但我真正需要的是展示
char_id | kills | deaths | points (kills - deaths)
我该怎么做?我应该创建一个不同的表并以其他方式注册内容吗?
我想我可以记录他们何时被杀死和何时死亡,然后按 char_id
分组并计算他们是被杀死还是死亡...但是...这种方法可行吗?
最佳答案
SELECT U.char_ID, SUM(U.kills) as kills, SUM(U.killed) as deaths, SUM(U.kills)- SUM(U.killed) as points FROM
(
SELECT killer_cid as char_id, count(killer_cid) as kills, 0 as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC
UNION
SELECT killed_cid as char_id,0 AS kills, count(killer_cid) as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killed_cid
ORDER BY count(killer_cid) DESC
) AS U
GROUP BY U.char_ID
ORDER BY SUM(U.kills)- SUM(U.killed) DESC
关于mysql 计数多个组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11266052/