私は上のMAXレベルとMINのレベルを取得しようとしていますfollowinMySQLのMAXとMIN
CREATE TABLE IF NOT EXISTS `players` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`group_id` int(11) NOT NULL DEFAULT '1',
`account_id` int(11) NOT NULL DEFAULT '0',
`level` int(11) NOT NULL DEFAULT '1',
...
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
FOREIGN KEY (`account_id`) REFERENCES `accounts` (`id`) ON DELETE CASCADE,
KEY `vocation` (`vocation`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `guilds` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`ownerid` int(11) NOT NULL,
`creationdata` int(11) NOT NULL,
`motd` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY (`name`),
UNIQUE KEY (`ownerid`),
FOREIGN KEY (`ownerid`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `guild_membership` (
`player_id` int(11) NOT NULL,
`guild_id` int(11) NOT NULL,
`rank_id` int(11) NOT NULL,
`nick` varchar(15) NOT NULL DEFAULT '',
PRIMARY KEY (`player_id`),
FOREIGN KEY (`player_id`) REFERENCES `players` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`rank_id`) REFERENCES `guild_ranks` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
ですプレイヤーテーブル1つのギルド内
は、しかし、私はいつもいつも最低レベル
をTISトップレベルと低レベルに同じ値を取得していますは、私はあなたが
SELECT g.`id`,
g.`name`,
g.`ownerid`,
g.`creationdata`,
g.`motd`,
(SELECT Count(*)
FROM guild_membership a,
players_online b
WHERE a.player_id = b.player_id
AND a.guild_id = id) AS `online`,
(SELECT Max(b.level)
FROM players b join guild_membership a on a.player_id = b.id
AND a.guild_id = g.id) AS `toplevel`,
(SELECT Min(a.level)
FROM players a join
guild_membership b on a.id = b.player_id
AND b.guild_id = g.id) AS `lowlevel`
FROM `guilds` g
WHERE g.`name` = 'Wideswing Poleaxe'
LIMIT 1;
あなたの「オンライン」フィールドはたぶん1または0になります。すべてのプレーヤーが同時にオンラインまたはオフラインになっている場合、それらの値のうちの特定の値(同じデータ値セット上)が保証されます。 (つまり、サブクエリは必要ありません)。 – Uueerdo
@Uueerdo:そうであれば、 'player'テーブルには単にオンラインでyes/noフラグを付けるか、もっと多くのデータには' id_player_online'フラグを設定する必要があります。しかし、逆の場合もあります。テーブル 'players_online'には' id_player'があります。したがって、1人のプレーヤーがそのテーブルで複数回使用できるようになります。だから、私のクエリはデータモデルにマッチしますが、もちろんそれはモデルの不具合かもしれません。 –
私は、元の質問が 'players_online'テーブルをどのように使っているかを判断していました。あなたがそれを解釈していたとしても、元のクエリは、プレイヤーがオンラインになった総回数を取得するでしょう。いずれにせよ、あなたの 'online'値は、それが集計されていないか、またはそれが計算されたサブクエリを含むクエリによってグループ化されていないので、気まぐれになるでしょう。代わりに、そのギルドの実質的にランダムなプレイヤーがオンラインになった回数を取得します。 – Uueerdo