さて、始める前に、ゼロで割ることが良くないことを知っていることを指摘したいと思います。私が知りたいのは、これを回避する最善の方法は何かということです。
私の CMS で、最近サインアップした登録ユーザー数を表示しようとしています。私が表示している最初の統計は「今日の登録ユーザー」で、この値が昨日の値から上がっているか下がっているかを示し、正/負のパーセンテージで表示します。
SO に関する他の質問を読むと、値の 1 つが 0 の場合は計算を完全に回避することをお勧めしますが、昨日登録ユーザーが 0 人で今日は 20 人だった場合、表示する必要がある決定的な増加があります - できません何も表示しないだけです。
このクエリを作成しました:
SELECT
COUNT(CASE WHEN DATEDIFF(HOUR, CURDATE(), created) <= 24 THEN user_id
ELSE NULL END) AS 1day,
COUNT(CASE WHEN DATEDIFF(HOUR, CURDATE(), created) >= 25 AND DATEDIFF(HOUR, CURDATE(), created) <= 48 THEN user_id
ELSE NULL END) AS 1to2days,
... other cases ...
FROM users
この機能:
function diff_percent($a, $b) {
$c = ($a > $b) ? ($a-$b)/$a*-100 : ($b-$a)/$b*100;
return $c;
}
そして、単に次のように呼び出します。
echo diff_percent($row['1to2days'], $row['1day']);
SQL を使用してゼロを簡単に null に変換することも、ゼロが検出された場合に関数内の計算を停止することもできますが、前述のように、昨日ユーザーが 0 人で今日は 20 人だった場合、そこにあることを示す必要があります。過去 24 時間でユーザーが大幅に増加しています。これを回避する最善の方法は何ですか? でも、 「 100%アップ」と表示するtodays_users > yesterdays_users
だけyesterdays_users == 0
ですか? 私の数学は苦手で、とても混乱しています。助けてください。