2013-04-24 127 views
0

我试图根据其他问题找到这个答案,但我无法将逻辑落实到我的必要性中。用结果集更新人物死亡和死亡

我可以很容易地得到我需要的信息,但是我无法用这些信息更新表格。

我曾尝试使用下面的查询选择了所有必要的值:

select `roleid`, 
(select count(`killerid`) from `kills` where `killerid`=`roleid`) as `kills`, 
(select count(`corpseid`) from `kills` where `corpseid`=`roleid`) as `deaths` 
from `characters` 

所以这个查询与其相应的死亡和死亡数返回字符的ID。

现在,我需要知道:如何更新表“字符”,将行“kill”和“deaths”设置为查询中的返回值?

谢谢你的时间。

+0

你想获得杀死数量和死亡数额,然后把它放回数据库?您是否要在更新前更改金额?你在用什么?库MySQLi? PDO? – Dan 2013-04-24 20:55:34

回答

1
UPDATE characters c 
    LEFT JOIN 
    (SELECT killerid, count(*) as kill_num FROM kills GROUP BY killerid) k1 
    ON c.roleid = k1.killerID 
    LEFT JOIN 
    (SELECT corpseid, count(*) as death_num FROM kills GROUP BY corpseid) k2 
    ON c.roleid = k2.corpseID 
SET c.kills = k1.kill_num, c.deaths = k2.death_num 
+0

非常好。先生,谢谢你。这是我第一次使用这个网站,而且我还在学习数据库编程。由于这个原因,我不能“赞许” - 或者本网站的任何内容 - 您的答案。 我注意到了一些事情:第一次使用查询时,所有的字符都被更新了,但是第二次运行(在xD之后大约10秒)更新了0行。所以我猜测它不会改变相等的行数。那是对的吗? – 2013-04-25 00:39:48

+0

它显示实际更改的行数。在杀死表没有改变之后,再次运行相同的更新后没有做出改变。 – piotrm 2013-04-25 02:02:54