Mysql 请协助:复杂的排名查询
我正在为一家扑克俱乐部开发一个网站,他们想展示他们球员的排名。球员参加比赛,每次排名都会获得预先确定的分数。然后俱乐部会展示一张按积分排序的球员表 俱乐部在CMS中输入该数据,共有四个数据库表。为清楚起见,删除了这些表的create语句中的一些字段:Mysql 请协助:复杂的排名查询,mysql,sql,relational-database,Mysql,Sql,Relational Database,我正在为一家扑克俱乐部开发一个网站,他们想展示他们球员的排名。球员参加比赛,每次排名都会获得预先确定的分数。然后俱乐部会展示一张按积分排序的球员表 俱乐部在CMS中输入该数据,共有四个数据库表。为清楚起见,删除了这些表的create语句中的一些字段: CREATE TABLE `players` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(128) COLLATE utf8_unicode_ci NOT
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`);
希望它与表命名结构的连接方式是不言自明的,但是外键信息也在其中
还有第五个表,placings,它有两列:placing_id,它只是一个主键列;以及存储该排名应获得多少积分的积分
问题:根据我的排名表中定义的积分结构,我的查询是什么样的,以便在所有比赛过程中提取所有球员的累积积分
我见过各种各样的解决方案,比如足球联赛表,但在查询中有积分系统,即赢3分,平局1分,输0分,而我的扑克联赛示例有更多的差异,因为它不是赢、输、平局的情况
在这方面的任何帮助都将不胜感激。在我看来,你需要参加一次又一次的锦标赛,以获得与所有终点相关的分数 您正在查找每个玩家的总积分-因此您需要按玩家id和总积分分组:
如果您还想获得球员信息而不仅仅是id,那么您可以加入球员。似乎您有一个缺陷,一名球员只能在一次锦标赛中参加一次?如果是这样的话,玩家id+锦标赛id上应该有主键或唯一键,那么玩家锦标赛就不需要了
select
player_id, sum(points)
from
tournaments_placings
inner join
placings
using(placing_id)
group by
player_id;