首页 > 解决方案 > 在单个 mysqli 查询中获得两个计数并执行计算

问题描述

我想要:

计算有多少行具有列 date = $date

第二次计算列日期 = $date AND 列结果 = word 'win' 的行数

然后将第一个计数值除以第二个并回显结果/值。

该值返回为 1 - 当行数 = 3 时,结果列中 Win = 2 的结果应为 1.5。

当我什至做 echo "".$testrow['win_count'] 。""; 结果仍然是 3,这是错误的,这是总行数的结果。

  <?php

    ini_set('display_errors', 1); error_reporting(E_ALL ^ E_NOTICE);

    $connection = mysqli_connect("*****", "*****", "*****", "*****");
    if (!$connection) {
        die("Database connection failed: " . mysqli_connect_error());
    }

    $Date = '2019-03-11';
    $Win = 'Win';

$testsql="
SELECT 
count(*) AS bet_count,
count(IF(result ='$Win', 1, 0)) AS win_count
FROM bets WHERE betDate = '$Date' GROUP BY betDate 
";
    $testresult = mysqli_query($connection, $testsql);

while ($testrow = mysqli_fetch_assoc($testresult))
{ 
    echo "<tr>";
echo "<td class='text-center'>".($testrow['bet_count']/$testrow['win_count']). "</td>";
echo "</tr>";
}

mysqli_close($connection);
?>

标签: phpmysqlmysqli

解决方案


这个....

count(IF(result = '$Win', 1, 0)) AS win_count

应该....

count(IF(result = '$Win', 1, NULL)) AS win_count

或者...

count(CASE WHEN result = '$Win' THEN 1 END)) AS win_count

另外,我建议您阅读 MySQL COUNT() AND SUM(),以便您了解为什么我在 COUNT() 中包含的 IF() 中使用 NULL 而不是 0,以及为什么我只是从示例 CASE 中删除了 ELSE NULL COUNT() 中的语句....


推荐阅读