1

私は2つのテーブルを持っています。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を使用しますが、質問には関係ありません)。プレーヤーは$whateverdateで開始し、ハッシュの戻り値のmobフィールドを使用してスコアを取得し、合計に追加します。しかし、SQLは強力であるため、自分で行う必要はありません。だから、問題は、MySQLにテーブルmobscoresからのスコアのmob名を交換するか、一緒に数えるように指示するにはどうすればよいですか?

このようなもの(私は本当のものを知らないので、ファンタジー構文が入ってくる):

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 に答える