Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 按两列排序-使用最高评分平均值和最高评分_Php_Mysql_Sql_Sql Order By_Rating System - Fatal编程技术网

Php 按两列排序-使用最高评分平均值和最高评分

Php 按两列排序-使用最高评分平均值和最高评分,php,mysql,sql,sql-order-by,rating-system,Php,Mysql,Sql,Sql Order By,Rating System,我想展示最高平均值(rating_avg)和评级数量(rating_count)的评级。在我当前的脚本中,无论有多少评级,它都会显示最高的平均评级(DESC),这对我的访问者来说是无用的 例如,它显示: 项目1-5.0(1个等级) 项目2-5.0(2个等级) 应按平均评级和评级金额显示前10名最高评级项目,例如: 项目1-4.5(356评级) 项目2-4.3(200级) 项目3-4.0(400级) 这就是我现在拥有的: $result = mysql_query("SELECT id, file

我想展示最高平均值(rating_avg)和评级数量(rating_count)的评级。在我当前的脚本中,无论有多少评级,它都会显示最高的平均评级(DESC),这对我的访问者来说是无用的

例如,它显示:

  • 项目1-5.0(1个等级)
  • 项目2-5.0(2个等级)
  • 应按平均评级和评级金额显示前10名最高评级项目,例如:

  • 项目1-4.5(356评级)
  • 项目2-4.3(200级)
  • 项目3-4.0(400级)
  • 这就是我现在拥有的:

    $result = mysql_query("SELECT id, filename, filenamedisplay, console_dir, downloads, rating_avg, rating_count FROM files WHERE console_dir = '".$nodash."' ORDER BY rating_avg DESC LIMIT 10");
    

    谢谢你,我感谢你的帮助

    这是一个微妙的问题,也是统计学中的一个问题。我所做的通常是将评级降低一个比例标准误差。这些并不完全是比例,但我认为同样的想法也可以应用

    你可以用“p*q的平方根除以n”的方法来计算。如果你不理解这一点,谷歌“一定比例的标准误差”(或者我可以建议“使用SQL和Excel进行数据分析”中的第三章对此进行更详细的解释):

    在任何情况下,看看这个公式是否适合你

    编辑:

    好的,我们把它改为平均值的标准误差。我第一次应该这么做,但我认为平均评级是一个比例。公式是标准偏差除以样本量的平方根。我们可以在
    const
    子查询中获得总体标准偏差:

         (select count(*) as cnt, stdev(rating_avg) as std from files where console_dir = '".$nodash."') as const
    
    这导致:

    order by rating_avg - std / sqrt(const.cnt)
    
    这可能有效,但我更希望每个组内都有标准偏差,而不是总体标准偏差。但是,它会根据样本大小的比例降低评级,这将改善您的结果


    顺便说一下,删除一个标准偏差的想法是相当随意的。我刚刚发现它产生了合理的结果。你可能更愿意,比如说,取标准偏差的1.96倍,得到置信区间的95%下限。

    我想这是一个完美的解释。你给了我一个开始的地方。该代码只显示1行,而不是10行(1-10),我不知道为什么。@user3431375。在我看来,这是一个聚合查询,所以我在
    having
    子句中包含了
    count(*)
    。意外地使其成为聚合查询。现在修好了。啊,是的,修好了。它完美地排序了Rating_AVG,但它仍然没有像我最初的问题一样考虑评级的数量。例如,前5个等级是:生物危害战5.0(1)爆能大师2 5.0(1)Bubsy 5.0(1)口径50 5.0(1)保龄球锦标赛5.0(1)它只是按平均等级排序,而不是按平均等级和等级数量排序。感谢您的帮助@GordonLinoff,我非常感谢!
    order by rating_avg - std / sqrt(const.cnt)