MySQL(初学者):根据查询答案替换另一个表中的字段

时间:2012-06-01 09:25:19

标签: mysql

我有两张桌子,一张有怪物名字和各自的分数:

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

1 个答案:

答案 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;

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