mysqli подсчитывает, как разделить эти два количества и получить результат echo

#php #mysql #mysqli

#php #mysql #mysqli

Вопрос:

Я хочу разделить эти два количества, а затем отобразить результат разделения в таблице [‘final_count’]. Может кто-нибудь, пожалуйста, помочь мне исправить, где я ошибаюсь…

 <table class='table table-bordered'>
<?php

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

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

$testsql="SELECT 
count(IF(betDate = '$Date', 1, 0)) AS bet_count,
count(IF(betDate = '$Date' AND result ='$Win', 1, 0)) AS win_count
 FROM bets";

$testresult = mysqli_query($connection, $testsql);

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

mysqli_close($connection);
?>
</table>
  

Комментарии:

1. И count(win_count) что подсчитывает?

2. Подсчитывает строки в таблице, где столбец date равен = $date, а столбец result = $win (строка ‘win’), но win_count не учитывается, где как bet_count

Ответ №1:

Если вы просто хотите отобразить это:

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

хотя я бы также улучшил ваш SQL-запрос:

 $testsql="
SELECT
  COUNT(*) AS bet_count,
  SUM(IF(result = $Win, 1, 0)) AS win_count,
FROM test WHERE betDate = $Date
";
  

И еще одно замечание — если вы хотите научиться работать с MySQL и PHP, я бы настоятельно рекомендовал вам изучить PDO вместо mysqli. Несмотря на то, что это кажется более сложным, это научит вас основам объектно-ориентированного программирования и некоторым полезным привычкам, связанным с работой с MySQL, таким как параметры (вопросительные знаки в примере ниже).

Например, ваш запрос в PDO будет

 $sql = "
SELECT
  COUNT(*) AS bet_count,
  SUM(IF(result = ?, 1, 0)) AS win_count,
FROM test WHERE betDate = ?
";
$sth = $dbh->prepare($sql);
$sth->execute([$Win, $Date]);
$results = $sth->fetchAll();
  

Комментарии:

1. Спасибо за помощь, я думаю, что есть небольшая проблема с разделением вычисления, в таблице есть три строки, где date = $ date, и одна из них, где result = $ win , но результат по-прежнему равен 1, хотя должно быть 3

2. Тем не менее, вычисление неверно, когда я добавляю GROUP BY

3. Если я изменю echo на echo <td class='text-center'>".$testrow['win_count'] . "</td>"; , результатом будет 3, хотя должно быть 2, поскольку из 3 строк только в двух из них столбец Win

4. Вы должны использовать SUM вместо count. COUNT подсчитает вам все значения, независимо от того, каковы они (будь то 0, 1 или что-либо еще). Я обновил ответ, чтобы отразить это.

5. Спасибо за вашу помощь, высоко ценится :). Отличного вам дня.