(为了便于理解,我认为最简单的方法是使用累积奖金翻转) 我有这些数据: http://sqlfiddle.com/#!2/e5ea89/1/0
我通过检查结果中的前一个当前行来获得当前/最新的累积奖金翻转,然后增加$ rollovercount:
$rollovercount = 0;
$previous = '';
$stmt = DB::Prepare("
SELECT jvt.jackpotvalue, jt.dateofjackpot
FROM JackpotTable jt
LEFT JOIN JackpotValueTable jvt on jvt.jackpotid = jt.jackpotid
ORDER BY jt.dateofjackpot desc
");
$stmt->execute();
$result = $stmt->get_result();
if ($result)
{
while ($row = $result->fetch_object())
{
$current = $row->jackpot;
if ($current < $previous)
{
$rollovercount ++;
}
$previous = $current;
}
}
return $rollovercount ;
这很好但现在我想获得平均翻转计数。 如果您看到示例数据,则最新的翻转计数为3(累积奖金值从上一行开始下降)。 在此之前它是5次翻转。 在那之前它是2翻转。 在此之前它是1翻转。 在那之前它是2次翻转。
所以3 + 5 + 2 + 1 + 2 = 13和13/5 = 2.6所以2.6是平均翻车量。
也许如果以某种方式可以将翻转存储在像$ rollovercount = array(3,5,2,1,2)这样的数组中;然后可能使用array_sum($ rollovercount)并将其除以count($ rollovercount)
答案 0 :(得分:1)
你可以这样做:
$rollovercount = 0;
$rolloverCountArray = array();
$previous = '';
$stmt = DB::Prepare("
SELECT jvt.jackpotvalue, jt.dateofjackpot
FROM JackpotTable jt
LEFT JOIN JackpotValueTable jvt on jvt.jackpotid = jt.jackpotid
ORDER BY jt.dateofjackpot desc
");
$stmt->execute();
$result = $stmt->get_result();
if ($result)
{
while ($row = $result->fetch_object())
{
$current = $row->jackpot;
if ($current < $previous)
{
$rollovercount ++;
} else {
$rolloverCountArray[] = $rollovercount;
$rollovercount = 0;
}
$previous = $current;
}
}
return array(
"rollovercountLast" => $rollovercount,
"rolloverCountAvg" => array_sum($rolloverCountArray) / count($rolloverCountArray)
);
我还没有测试过这段代码,但我希望它能让您了解如何在代码中解决这个问题。祝你好运!