Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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_Database - Fatal编程技术网

Mysql 从数据库计算播放器统计信息

Mysql 从数据库计算播放器统计信息,mysql,database,Mysql,Database,我有以下表格 我想从给定的表中获取所有玩家统计记录,每个玩家的记录包括 球员姓名 位置 游戏总数 进球数 目标协助的总数 总分(总目标+总辅助=总分) 在尝试之后,我提出了这个问题 SELECT SQL_CALC_FOUND_ROWS CONCAT(u.first_name, ' ', u.last_name) as player_name, p.position, COUNT(g.id) FROM gce_player p LEFT JOIN


我有以下表格

我想从给定的表中获取所有玩家统计记录,每个玩家的记录包括

  • 球员姓名
  • 位置
  • 游戏总数
  • 进球数
  • 目标协助的总数
  • 总分(总目标+总辅助=总分)
  • 在尝试之后,我提出了这个问题

    SELECT SQL_CALC_FOUND_ROWS
        CONCAT(u.first_name, ' ', u.last_name) as player_name,
        p.position, 
        COUNT(g.id)
    FROM 
        gce_player p 
    LEFT JOIN 
        gce_user u ON(u.id = p.user_id) 
    LEFT JOIN 
        gce_game_team_lineup gtl ON(gtl.player_id = p.id) 
    LEFT JOIN 
        gce_game_team gt ON(gt.id = gtl.game_team_id) 
    LEFT JOIN 
        gce_game_goal gg ON(gg.player_id = p.id) 
    LEFT JOIN 
        gce_game g ON(g.id = gt.game_id) 
    GROUP BY p.id 
    ORDER BY p.id asc
    
    上面的查询返回我正确的记录,直到游戏总数,我面临的问题是在此之后获取正确的记录,我将感谢任何帮助

    下面是链接,如果您想查看模式,我也添加了一些测试数据

    多谢各位

    更新:

    这里有一些规则需要记住

  • 进球数=球员进球总数。例如,如果在
    gce\u game\u goal
    表中有10行
    player_id的值为4
    表示该球员已攻入10球 我需要为每个玩家取这张唱片 同样,如果有7行中的player_id的值为3,则此 意味着id为3的球员已经攻入7球,同样

  • 进球助攻总数=球员给予守门员的助攻总数(助攻就像足球中的传球)。我需要 计算用户完成的协助或通过的总数。
    每个进球都有两次助攻,每次助攻都是球员 把球传给高尔夫球手的人。我想数一数传球的次数 或由球员提供的协助。例如,如果在
    gce\u游戏\u目标中
    表中有8行或记录的值为3 assis1_id或assist2_id列,这意味着id为3的玩家拥有 总共得到8次助攻

  • 如果您还有任何疑问/问题,请告诉我,我会尽力改进我的问题

    谢谢你试试这个

    SELECT 
        CONCAT(u.first_name, ' ', u.last_name) as player_name,
        count(g.id) as Goals,
        (select 
                count(*)
            from
                gce_game_goal
            where
                assist1_id = p.player_id) 
        +(select 
                count(*)
            from
                gce_game_goal
            where
                assist2_id = p.player_id) as Assists,
         count(g.id) 
         + (select 
                count(*)
            from
                gce_game_goal
            where
                assist1_id = p.player_id) 
         + (select 
                count(*)
            from
                gce_game_goal
            where
                assist2_id = p.player_id) as Total
    FROM
        gce_player as p
    LEFT JOIN
        gce_game_goal as g ON p.id = g.player_id
    LEFT JOIN 
        gce_user u ON(u.id =p.user_id)
    GROUP BY p.player_id
    

    您所面临的问题是由于数据的多个不同维度(如游戏和目标)的聚合造成的。这将导致每个玩家的叉积

    一个相当普遍的解决方案是在
    from
    子句中沿每个维度进行聚合。每个变量(或几个变量)来自不同的聚合:

    select u.last_name, u.first_name, p.position, 
           pg.goals, pg.assists, (pg.goals + pg.assists) as TotalPoints
    from gce_player p join
         gce_user u
         on p.user_id = u.id left outer join
         (select player_id, SUM(goal) as goals, SUM(assist) as assists
          from ((select player_id, 1 as goal, 0 as assist
                 from gce_game_goal
                ) union all
                (select assist1_id, 0 as goal, 1 as assist
                 from gce_game_goal
                ) union all
                (select assist2_id, 0 as goal, 1 as assist
                 from gce_game_goal
                )
               ) t
          group by player_id
         ) pg
         on pg.player_id = p.id left outer join
         (select gtl.player_id, count(*) as NumTeams
          from gce_game_team_lineup gtl join
               gce_game_team gt
               on gtl.id = gt.team_id
         ) g
         on g.player_id = p.id
    

    到底是什么不起作用?哪个值,您期望什么,返回什么?有错误吗,哪些错误?目标协助的总数是多少。?抱歉,各位把你们搞糊涂了,我正在更新我的问题的所有细节,请稍等几分钟,谢谢。你们只是在使用数据库吗?你有没有访问像C++甚至PHP这样的服务器?我只能想象,当每个表大约有50行时,最后一个查询的速度会有多慢。如果是这样,我建议您在那里处理您的计算。它更容易、更快。虽然有更多的代码行,但您可能会花同样的时间进行类似这些工作的深奥查询。@JoeCoderGuy我正在使用PHP
    我建议您在那里处理您的计算。
    这是什么意思?这给了我错误,您可以自己尝试查询,因为查询不起作用,我无法识别错误,如果您想根据测试数据测试您的查询,这里是SQLFIDLE的链接,顺便说一句,谢谢您的回答。@Ibrahimazharmar。我解决了问题。然而,比特定语法更重要的是想法。在将玩家级别的各种统计数据合并到一起之前,您需要计算它们。