私はポーカークラブのウェブサイトを開発しており、彼らは選手の順位を見せたいと思います。プレイヤーはトーナメントでプレーし、各配置ごとに所定のポイントが与えられます。クラブは、累積ポイントで注文された選手のテーブルを表示したいと考えています。助けてください:複雑な順位付けのクエリ
クラブはこのデータをCMSに入力し、4つのデータベーステーブルがあります。うまくいけば、それはテーブルの命名構造でリンクアップする方法として自明だ
CREATE TABLE `players` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);
CREATE TABLE `players_tournaments` (
`player_id` int(10) unsigned NOT NULL,
`tournament_id` int(10) unsigned NOT NULL,
KEY `player_id` (`player_id`),
KEY `tournament_id` (`tournament_id`)
);
CREATE TABLE `tournaments` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`id`)
);
CREATE TABLE `tournaments_placings` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`tournament_id` int(10) unsigned NOT NULL,
`player_id` int(10) unsigned NOT NULL,
`placing_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `tournament_id` (`tournament_id`),
KEY `player_id` (`player_id`),
KEY `placing_id` (`placing_id`)
);
ALTER TABLE `players_tournaments`
ADD CONSTRAINT `players_tournaments_ibfk_3` FOREIGN KEY (`player_id`) REFERENCES `players` (`id`),
ADD CONSTRAINT `players_tournaments_ibfk_4` FOREIGN KEY (`tournament_id`) REFERENCES `tournaments` (`id`);
ALTER TABLE `tournaments_placings`
ADD CONSTRAINT `tournaments_placings_ibfk_1` FOREIGN KEY (`tournament_id`) REFERENCES `tournaments` (`id`),
ADD CONSTRAINT `tournaments_placings_ibfk_2` FOREIGN KEY (`player_id`) REFERENCES `players` (`id`),
ADD CONSTRAINT `tournaments_placings_ibfk_3` FOREIGN KEY (`placing_id`) REFERENCES `placings` (`placing`);
が、外部キー情報がありすぎである。これらのテーブルの作成文は(明確にするため取り除かいくつかのフィールド)です。
5つ目のテーブルplacings
もあります。これは2つのカラム:placing_id
です。ちょうどPRIMARY KEY
カラムです。その配置に与えられるポイント数を格納するpoints
。
質問:何私のクエリは私のplacings
テーブルに定義されたポイントの構造に基づいて、すべてのトーナメントの過程ですべてのプレーヤーの累積ポイントを引くために、次のようになりますか?
私はサッカーリーグのテーブルのようなものに対して様々な解決策を見ましたが、それは質問内にポイントシステムを持っています(つまり、勝利のための3ポイント、抽選のための1ポイント、損失の0ポイント)リーグの例は、勝利、敗北、抽選のケースではないので、より多くの分散を持っています。
これについてのお手伝いがあれば幸いです。
あなたは欠陥があるようですが、プレイヤーはシングルトーナメントで1回しか参加できませんか?その場合は、player_id + tournament_idにプライマリキーまたはユニークキーが存在する必要があります(players_tournamentsは必須ではありません) – ajreal