Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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 - Fatal编程技术网

Mysql 获取数据库中每个不同值的总和

Mysql 获取数据库中每个不同值的总和,mysql,sql,Mysql,Sql,我有一个数据库,里面有梦幻足球队的经理和每个球队的15名球员。我可以按照下面的方法列出所有有“罗宾·范佩西”的球队 我可以这样做来计算其中有多少“罗宾·范佩西”(只返回一个数字) 但有没有办法让我得到类似的清单 Count | Player Name ------------------------- 62 | Robin Van Persie 12 | Wayne Rooney 22 | Michu 31 | Theo Walcott 对于数据库中的每个不同值?您确实

我有一个数据库,里面有梦幻足球队的经理和每个球队的15名球员。我可以按照下面的方法列出所有有“罗宾·范佩西”的球队

我可以这样做来计算其中有多少“罗宾·范佩西”(只返回一个数字)

但有没有办法让我得到类似的清单

Count | Player Name
-------------------------
62    | Robin Van Persie
12    | Wayne Rooney
22    | Michu
31    | Theo Walcott

对于数据库中的每个不同值?

您确实希望有三个表

表1
在“玩家”表中,有两列:主id和所有玩家的列表

表2
“管理者”表还有两列:每个管理者名称和一个主Id

表3
“经理和球员”表将每个经理的主ID与其团队中每个球员的主ID相关联。从技术上讲,这个表有3列:表主id、管理者id和玩家id。所以这个表将有多个相同管理者id和玩家id的实例

使用此结构,您可以运行如下查询(可能需要在内部联接上使用“binarys”):

此模式还可以让您很容易看到每个经理团队中的球员:

SELECT p.name
FROM managers_players mp
inner join managers m
on m.id = mp.manager_id
inner join players p
on p.id = mp.player id
where m.name like '%Manager Name%';

或者执行
选择m.name
并将where子句更改为
p.name
以查看拥有特定球员的所有经理

你应该首先规范化你的数据库,这样所有玩家都有自己的行而不是列。我从来没有做过规范化,但是在这个数据库中,顺序很重要。例如,p1-p11是实际团队,p12-p15是子团队。正常化会把事情搞砸吗?如果有帮助的话,我有一个单独的数据库,每个玩家都有不同的玩家名字。然后,每个玩家也加入他们的索引。考虑哪些信息对于每个玩家来说都是很重要的。您的表可以有球员ID、姓名、位置等。无论他们是实际的球队还是替补,都应该在一个字段中,带有“实际”或“替补”等值。任何数据都可以在不丢失细节的情况下进行规范化。听起来比我预期的要复杂一些。。。我已经设置了表1和表2。我的第三个表如你在这篇文章的顶部看到的,有15列玩家。我可以运行一些简单的方法来执行上面的查询,并对数据库中的每个玩家名循环查询,但这需要更长的时间才能运行。我会看看你的建议,看看它是否值得我改变,因为我需要一段时间去做,然后重新获得信息。谢谢你的建议!是的,这将需要更长的时间来运行,但净时间损失可能仍然比实现我的建议更快:您可以尝试使用嵌套条件或select语句进行实验。如果这只是你朋友的一件小事,我会找到一个“足够好”的黑客,不会花时间来修复模式,但如果这是用于生产平台,我肯定会建议根据我建议的模式对其进行更多的抽象。
Count | Player Name
-------------------------
62    | Robin Van Persie
12    | Wayne Rooney
22    | Michu
31    | Theo Walcott
SELECT m.name, count(mp.player_id) as count
FROM managers_players mp
inner join managers m
on  mp.manager_id =  m.id
inner join players p
on p.id = mp.player_id
group by m.id
order by count DESC;
SELECT p.name
FROM managers_players mp
inner join managers m
on m.id = mp.manager_id
inner join players p
on p.id = mp.player id
where m.name like '%Manager Name%';