【问题标题】:Finding Median Mysql寻找中位数 Mysql
【发布时间】:2013-07-16 19:12:42
【问题描述】:

尝试在 MYSQL 数据库中查找数组的中位数。

目前,我正在像这样抓取我的数据:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);

然后我将它放入这样的数组中。

$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
$names[] = $row['Day'];

然后我试图找到该数组的中位数:

            sort($names);
            $count = count($names);
            $middleval = floor(($count-1)/2); 
                if($count % 2) { 
                    $median = $names[$middleval];
                } else { 
                    $low = $names[$middleval];
                    $high = $names[$middleval+1];
                    $median = (($low+$high)/2);
                }

        return $median;

        }

        var_dump($names);

我没有收到任何错误,但它使我的应用程序崩溃。

关于我做错了什么有什么建议吗?

【问题讨论】:

  • 您跳过第一行而不返回它是否有原因?通常,我们希望使用LIMIT 0,300 包含第一行,而不是使用LIMIT 1,300 跳过第一行并返回从第二行开始的行。
  • 对不起斯宾塞。固定。
  • 您是否在第三个代码块之前将第二个代码中的 while 关闭?
  • 我关闭了我最后的时间}

标签: php mysql math mode median


【解决方案1】:

您是否在第三个代码块之前关闭第二个代码中的 while?

回答:

我在最后一个}

中结束了

失败...在第三个代码块中运行代码之前在第二个代码块中关闭...这将仅找到一次中位数,而不是每次从 mysql 返回的行设置名称时都尝试查找中位数。第一次,名称的计数为 1,然后减去 1 = 0 并除以 2。这将为您提供 0。然后您尝试获取 0 和 2 的其余部分。这将丢弃您的其余代码。试试这个:

$middleMonth = "SELECT Day, COUNT(Day) AS totalNumber FROM finalbaby GROUP BY Day ORDER BY COUNT(Day) DESC LIMIT 1, 300";
$middleResult = mysql_query($middleMonth);
$names=array();
while($row = mysql_fetch_assoc($middleResult)) {
    $names[] = $row['Day'];
}
sort($names);
$count = count($names);
$middleval = floor(($count-1)/2); 
if($count % 2) { 
    $median = $names[$middleval];
} else { 
    $low = $names[$middleval];
    $high = $names[$middleval+1];
    $median = (($low+$high)/2);
}
echo $median;
var_dump($names);

//previous code
//if this code is inside function then return if not then print
//return $median;
//if this code is inside function then the return above will cancel this var_dump
//var_dump($names);

请记住

警告! 此扩展自 PHP 5.5.0 起已弃用,并将在未来删除。相反,应该使用MySQLiPDO_MySQL 扩展名。另请参阅MySQL: choosing an API 指南和related FAQ 了解更多信息。

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2018-05-17
    • 2012-08-11
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2011-11-04
    • 1970-01-01
    相关资源
    最近更新 更多