У меня возникают проблемы с подсчетом строк в таблице. Я хочу подсчитать, сколько строк там, где question_id
совпадает с $id.
Однако, когда я повторяю $total_records
результат равен 1.
Я ожидаю 21. Я полностью уверен, что переменные и информация базы данных верны. Может ли кто-нибудь объяснить, что я делаю неправильно?
$sqlwow="SELECT COUNT(a_id)
FROM forum_answer
WHERE question_id='$id'
ORDER BY a_id DESC";
$rsresult = $mysqli->query($sqlwow);
$row=$rsresult->fetch_assoc();
$total_records = count($row);
echo $total_records;
$sqlwow="SELECT COUNT(*)
FROM forum_answer
WHERE question_id='$id'
ORDER BY a_id DESC";
$rsresult = $mysqli->query($sqlwow);
$row = $rsresult->fetch_row();
$total_records = $row[0];
Вы не должны получать ассоциативный результат, когда все, что у вас есть, - это один столбец. PDO на самом деле имеет ярлык для этого, используя только fetchColumn
чтобы получить первый столбец. MySQLi, похоже, не имеет этого ярлыка, поэтому вы можете получить всю строку в виде числового массива, а затем вернуть первый результат в этом массиве (первый столбец), который будет подсчетом.
Вы также должны просто использовать count(*)
или count(1)
. Использование имени столбца происходит медленнее, поскольку оно не проверяет, сколько строк возвращается, но сколько ненулевых значений этого столбца возвращается. В большинстве случаев это то же самое, особенно если этот столбец является первичным ключом. Спасибо за разъяснение @fthiella.
count(*)
может быть даже более точным, если a_id
является первичным ключом и в этом случае не может быть нулевым.
count($row)
всегда будет 1. Вам нужно добавить псевдоним вашего счета в оператор SQL:
$sqlwow="SELECT COUNT(a_id) as num_records
FROM forum_answer
WHERE question_id='$id'
ORDER BY a_id DESC";
Затем повторите это как:
$total_records = $row['num_records'];
echo $total_records;
fetch_assoc()
. Поскольку существует только один столбец, current($row)
должен нормально работать без псевдонима или использовать fetch_row()
и использовать $row[0]
в моем запросе. Это просто комментарий, основанный на «необходимости псевдонима».
echo $total_pages;
прежде , чемfor
и посмотреть , что значение$total_pages
есть.