1

上手。テーブルを作った方法で、自分が欲しいものが可能かどうかはよくわかりません。説明させてください。

私はこのテーブルを手に入れました

CREATE TABLE `kill_log` (
  `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `killer_cid` int(11) NOT NULL,
  `killed_cid` int(11) NOT NULL,
  `map` varchar(25) NOT NULL DEFAULT '',
  KEY `killer_cid` (`killer_cid`),
  KEY `killed_cid` (`killed_cid`)
)

ゲームで誰かが誰かを殺すと、それが登録されます。毎月の終わりに、殺した回数と殺された回数を計算して勝者を計算する必要があります。

グループでクエリを作成しようとしましたが、彼が殺された回数を計算する方法がわかりませんでした。

SELECT killer_cid as char_id, count(killer_cid) as kills
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC

しかし、私が本当に必要としているのは、見せることです

char_id  |  kills  |  deaths  |  points (kills - deaths)

どうすればこれを行うことができますか?別のテーブルを作成して、別の方法で登録する必要がありますか?

彼らが殺されたときと死んだときを登録し、グループ化しchar_idて殺したか死んだかを数えることができると思います。しかし..この方法で可能ですか?

4

2 に答える 2

2
SELECT U.char_ID, SUM(U.kills) as kills, SUM(U.killed) as deaths, SUM(U.kills)- SUM(U.killed) as points FROM
(
SELECT killer_cid as char_id, count(killer_cid) as kills, 0 as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killer_cid
ORDER BY count(killer_cid) DESC

UNION

SELECT killed_cid as char_id,0 AS kills, count(killer_cid) as killed
FROM kill_log
WHERE `time` >= (NOW() - INTERVAL 30 DAY)
GROUP BY killed_cid
ORDER BY count(killer_cid) DESC
) AS U
GROUP BY U.char_ID
ORDER BY SUM(U.kills)- SUM(U.killed) DESC
于 2012-06-29T17:22:01.803 に答える
0
select
 killer.killer_cid as cid,
 count(distinct killer.killed_cid, killer.time) as kills,
 count(distinct killed.killer_cid, killed.time) as died,
 count(distinct killer.killed_cid, killer.time) - count(distinct killed.killer_cid, killed.time) as points
from kill_log as killer
left join kill_log as killed (killer.killer_cid = killed.killed_cid)
group by killer.killer_cid
于 2012-06-29T17:15:24.177 に答える