0

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);

エラーは発生していませんが、アプリケーションがクラッシュします。

私が間違っていることについて何か提案はありますか?

4

1 に答える 1

1

3 番目のコード ブロックの前に、2 番目のコード ブラックの while を閉じていますか?

答えた:

最後の } で while を閉じます

失敗... 3 番目のコード ブロックでコードを実行する前に 2 番目のコード ブロックで閉じます... これにより、mysql が返す行から名前を設定するたびに中央値を見つけようとするのではなく、1 回だけ中央値を見つけます。最初は名前の数が 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 で非推奨になり、将来的に削除される予定です。代わりに、MySQLiまたはPDO_MySQL拡張機能を使用する必要があります。詳細については、MySQL: APIガイドの選択および関連する FAQも参照してください。

于 2013-07-16T19:52:07.747 に答える