Подсчет строк в MySQL

0

У меня возникают проблемы с подсчетом строк в таблице. Я хочу подсчитать, сколько строк там, где 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;
  • 0
    Попробуйте добавить echo $total_pages; прежде , чем for и посмотреть , что значение $total_pages есть.
  • 0
    Он отображает 0. Так что-то не так с получением $ total_pages?
Показать ещё 7 комментариев
Теги:

2 ответа

2
Лучший ответ
$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.

  • 0
    COUNT (*) будет подсчитывать строки, в то время как COUNT (a_id) будет подсчитывать все строки, где a_id не равен NULL, так что это фактически влияет на результат, но это зависит от намерения ОП
  • 0
    @fthiella, спасибо за разъяснения. Исходя из формулировки вопроса, я бы предположил, что это не намерение OP, поэтому count(*) может быть даже более точным, если a_id является первичным ключом и в этом случае не может быть нулевым.
Показать ещё 1 комментарий
1

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;

  • 0
    Вам не нужно использовать псевдоним. Псевдоним полезен только из-за fetch_assoc() . Поскольку существует только один столбец, current($row) должен нормально работать без псевдонима или использовать fetch_row() и использовать $row[0] в моем запросе. Это просто комментарий, основанный на «необходимости псевдонима».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню