我有两张桌子,一张有怪物名字和各自的分数:
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
答案 0 :(得分:2)
尝试:
SELECT (SELECT sum(score) FROM mobscores WHERE mobscores.name = mobkills.name GROUP BY name) as Score
FROM mobkills
WHERE name= 'McMiner' AND date >= SomeQueryDateToStartFrom;
或者,您可以使用内部联接...