Php 计算总分

Php 计算总分,php,mysqli,triggers,Php,Mysqli,Triggers,我有一个包含这些表的数据库 users(name, team_id, overall_user_score) teams(id, name, team_score, totalscore) 我如何在每次更新后触发运行,其中its会获取团队中所有用户的分数和该团队的team_分数,然后将它们相加,并将其放入totalscore 我没有任何触发器的代码。我有php来显示总分,仅此而已 function showTeamScore() { require "connect.php";

我有一个包含这些表的数据库

users(name, team_id, overall_user_score)
teams(id, name, team_score, totalscore)
我如何在每次更新后触发运行,其中its会获取团队中所有用户的分数和该团队的team_分数,然后将它们相加,并将其放入totalscore

我没有任何触发器的代码。我有php来显示总分,仅此而已

function showTeamScore() {
    require "connect.php";

    $score = mysqli_query($connection, "SELECT * 
FROM teams 
WHERE id = '".$_GET['id']."'")  or die(mysqli_error($connection));

  while ($data = mysqli_fetch_array($score)) {

 echo $data['overall_score'];
  }

}
编辑:代码和问题更新

mysqli_query($connection, "UPDATE teams SET totalscore=overall_score+IFNULL((SELECT sum(overall_user_score) FROM users WHERE team_id=id),0)") or die(mysqli_error($connection));

一个简单的子查询就可以做到这一点:

-- query #1
SELECT id, tname,
   (SELECT sum(uscore) FROM usr WHERE tid=id) tscore
FROM teams ORDER BY id
您可以直接运行此选择,也可以为其定义视图

如果您只想要总分,您可以简单地执行以下操作:

-- query #2
SELECT SUM(uscore) total_score FROM usr
或者,结合前面的团队列表:

-- query #3 (combination of #1 and #2)
SELECT id, tname,(SELECT sum(uscore) FROM usr WHERE tid=id) tscore
FROM teams
UNION ALL
SELECT 999,'total score all teams',SUM(uscore) FROM usr
ORDER BY id
对于-Demo之类的示例数据,请参见此处:

小组:

id  tname
1   Dallas
2   Houston
3   Austin
usr:

您将从查询3中获得此结果:

id  tname                 tscore 
1   Dallas                28
2   Houston               11
3   Austin
999 total score all teams 39
好的,如果您想在最后一列中看到所有用户及其各自的团队分数,您可以这样做

-- query #4
SELECT uid, name,uscore,(SELECT sum(uscore) FROM usr WHERE tid=u.tid) tuscore
FROM usr u
这将导致

uid  name uscore  tuscore
1    Paul    10    28
2    Mary     3    28
3    Harry    7    11
4    Frank    4    11
5    Lisa    15    28
全新的答案:

您可能需要这样的更新选择4a或4b:

-- query #4a
UPDATE teams t INNER JOIN
(SELECT tid, SUM(uscore) usc FROM usr GROUP BY tid) u ON u.tid=t.id
SET t.tsc=t.tsc+u.usc
或者请看这里:

其中个人用户贡献uscore将添加到团队总分tsc中。在团队中只有一个得分栏是有意义的

与以前的几十

id  tname   tsc
1   Dallas  20
2   Houston  7
3   Austin  18
然后,上面列出的用户贡献将计算新的团队总分

id   tname   tsc
 1   Dallas   48
 2   Houston  18
 3   Austin   18
之后,应重置用户分数,以避免重复计算。做

UPDATE usr SET uscore=0

或者,您可以在用户表中设置无效标志,如果你仍然想看到最后的分数,但不想再次计算它。

你能显示你当前的查询吗?@MHakvoort我没有任何TiggerMay的代码你不需要触发器,但你可以用合适的视图来做同样的事吗?@cars10触发器会不容易吗?触发器会尝试保持一个冗余表的最新状态,并承担让所有其他用户在it开展业务时等待。视图不具欺骗性,只会查看最新的原始数据,并在需要时进行组合。这只是将用户分数相加。我如何将团队的总分数添加到tscore。另外,如果将团队id设置为1,那么这将重复相同的分数4次,因为有4个团队?请解释一下底部的查询。在我看来,这就像第一个查询,它只是将特定团队中所有用户的分数相加好的,但是团队有自己的分数,我希望将其添加到用户分数的总和中。嗯,我总共提出了三个查询:1。每队得分2分。全队总分3分。最后一行是1和2个团队分数和总分的组合。您确实这样做了,但我最初的问题是询问团队中所有用户的分数和该团队的团队分数,然后将它们相加,并将其放入totalscore
id   tname   tsc
 1   Dallas   48
 2   Houston  18
 3   Austin   18
UPDATE usr SET uscore=0