2012-06-01 33 views
1

我有兩個表,一個有怪物名稱及其各自的得分: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想要殺死,然後使用返回暴徒田野上有h檢索得分以添加到總計。 但我知道,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 

回答

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; 

或者,你可以使用一個內連接...

+0

不能投票了,但是這是非常有益的,謝謝! – BastetFurry

+0

如果一切正常,你應該是能者多勞標記爲接受的答案... – JezB

+0

完成。 :) 感謝您的提醒。 – BastetFurry