Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 请协助:复杂的排名查询_Mysql_Sql_Relational Database - Fatal编程技术网

Mysql 请协助:复杂的排名查询

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

我正在为一家扑克俱乐部开发一个网站,他们想展示他们球员的排名。球员参加比赛,每次排名都会获得预先确定的分数。然后俱乐部会展示一张按积分排序的球员表

俱乐部在CMS中输入该数据,共有四个数据库表。为清楚起见,删除了这些表的create语句中的一些字段:

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;