#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 строк только в двух из них столбец Win4. Вы должны использовать SUM вместо count. COUNT подсчитает вам все значения, независимо от того, каковы они (будь то 0, 1 или что-либо еще). Я обновил ответ, чтобы отразить это.
5. Спасибо за вашу помощь, высоко ценится :). Отличного вам дня.