Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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
Php 前10名收集完成-MySQL查询公式中的怪物?_Php_Mysql_Calculated Columns - Fatal编程技术网

Php 前10名收集完成-MySQL查询公式中的怪物?

Php 前10名收集完成-MySQL查询公式中的怪物?,php,mysql,calculated-columns,Php,Mysql,Calculated Columns,我有以下表格: 用户基本数据(唯一) [userid][name][etc] 用户集合(一对一) [userid][game] 用户录制的播放(多对多) [userid][game][scenario][etc] 游戏基本数据(唯一) [游戏][总场景] 我想输出一个表格,以%的降序显示前10名用户的收藏播放完成百分比: 输出表 [userid] [collection_completion] 3 95% 1 81% 24

我有以下表格:

用户基本数据(唯一)
[userid][name][etc]

用户集合(一对一)
[userid][game]

用户录制的播放(多对多)
[userid][game][scenario][etc]

游戏基本数据(唯一)
[游戏][总场景]

我想输出一个表格,以%的降序显示前10名用户的收藏播放完成百分比:

输出表

[userid]  [collection_completion]
   3               95%
   1               81%
  24               68%
  etc              etc
在我看来,一个用户的计算顺序是:

  • 用户集合
    游戏基本数据
    计数(gbd.total_场景)中获取用户拥有的场景总数
  • COUNT(不同场景)
    为该用户抓取所有录制的播放
  • 将所有录制的剧本除以拥有的剧本总数
  • 最后是两个查询和一点PHP消息。对于按完成百分比排序的用户列表,事情会变得稍微复杂一些

    我想我可以在一个查询中获取所有用户的集合总数,在另一个查询中记录所有用户的播放,然后在PHP中进行计算并对最终的数组进行排序,但如果我只想要前10名,那么为1000多名用户做这一切似乎有些过分了


    MySQL中是否有一个邪恶的怪物查询可以做到这一切,并且
    限制10
    ?或者,在这种情况下,坚持使用PHP处理大部分工作是正确的吗?

    如果我正确理解您的要求,您可以尝试以下方法

    SELECT  userid,
            us.TotalUserscenario / gbd.total_scenarios collection_completion
    FROM    (
                SELECT  userid,
                        game,
                        COUNT(scenario) TotalUserscenario
                FROM    UserRecordedPlays urp
                GROUP BY    userid,
                            game
            ) UserScenarios us INNER JOIN
            GameBasicData gbd ON us.game = gbd.game
    ORDER BY collection_completion DESC
    LIMIT 10
    

    您可以将百分比存储在其他地方(例如另一个表),并在更改
    用户录制的播放时更新它。然后它将是一个简单的连接。。。按百分比订购。这在你的场景中可行吗?