1

我有两张表,一张有怪物的名字和他们各自的分数:

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
4

1 回答 1

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;

或者,您可以使用内部连接...

于 2012-06-01T09:29:19.897 回答