我有两张表,一张有怪物的名字和他们各自的分数:
CREATE TABLE `mobscores` (
`name` TINYTEXT NOT NULL ,
`score` TINYINT NOT NULL
);
和一个在我的服务器上实际杀死的人:
CREATE TABLE `mobkills` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
`mob` tinytext NOT NULL,
`item` smallint(6) NOT NULL DEFAULT '0',
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
现在我可以用蛮力的方式将第一个表读入散列(在这里使用 Perl,但这对问题无关紧要。),在告诉 MySQL 我想要杀死一个人之后,逐行读取 mobkills玩家从 $whateverdate 开始,然后使用哈希上的返回 mob 字段来检索分数以添加到总数中。但我知道 SQL 很强大,所以我不需要自己这样做。所以,问题是,我如何告诉 MySQL 交换,甚至一起计算表 mobscores 中得分的暴民名称?
像这样的东西(幻想语法传入,因为我不知道真实的语法):
SELECT score (AS score FROM mobscores WHERE name=mob)
FROM mobkills
WHERE name= 'McMiner' AND date >= SomeQueryDateToStartFrom;
我不知道 MySQL 是否甚至可以为我加分,这样我就不需要在 Perl 脚本中步行了,但那是可选的。提前致谢。:)
编辑:是的,多亏了 rkosegis 的提示,我得到了这个。:D
SELECT name, sum( (SELECT score FROM mobscores WHERE mobscores.name = mobkills.mob))
as score
FROM mobkills group by name order by score desc