Уведомление о подсчете строк

#php

#php

Вопрос:

Я пытаюсь создать уведомление, в котором пользователь войдет в систему, и посмотреть, сколько ожидающих запросов у них все еще есть при входе на домашнюю страницу. Однако я получаю эту ошибку, в которой говорится, что параметр count должен быть массивом или объектом

count(): параметр должен быть массивом или объектом, который реализует счетный

Что я сделал не так и как мне это исправить? Спасибо.

 <?php
                $sql = "SELECT status,request 
                         FROM orders 
                         WHERE status = 'Pending'
                         OR request = 'Pending'";
                $result = $conn->query($sql);
                if(!$result) die($conn->error);
                $rows = $result->num_rows;

                if (COUNT($rows['status']) OR COUNT($rows['request']) > 0) { 
                    echo "You have ".(COUNT($rows['status'])   COUNT($rows['request']))."pending notificatins.";
                }else{
                    echo "You have 0 pending notifications.";
                }
    ?>
  

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

1. Вы передаете количество строк $rows в свою count функцию, которая count() принимает объекты и массивы.

Ответ №1:

Нет смысла извлекать все строки только для их подсчета. Вам нужен другой запрос:

 SELECT COUNT(request) 
           FROM orders 
            WHERE status = 'Pending'
            OR request = 'Pending'
  

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

1. поскольку мне нужно подсчитывать как статус, так и запрос, должен ли мой запрос быть похож на SELECT COUNT (статус, запрос) …?

2. Нет, это недопустимый синтаксис, но даже в этом случае этого делать не нужно. Вы подсчитываете строки, соответствующие вашему WHERE, и каждая строка имеет как статус, так и запрос, поэтому количество одинаковое

3. используйте count(*) , и вы получите сумму status = 'Pending' OR request = 'Pending'

4. На самом деле я пытаюсь подсчитать как запрос, так и статус и суммировать их вместе, потому что они находятся в разных столбцах, следовательно, если 1 запись статуса находится в ожидании, а 2 записи запроса находятся в ожидании, я хочу, чтобы она отображалась в виде 3 уведомлений

5. Мой запрос подсчитывает ВСЕ строки, соответствующие вашему предложению WHERE. И поскольку вы получили ИЛИ есть, достаточно, чтобы только один из этих файлов в данной строке был Pending для учета строки. Попробуйте

Ответ №2:

Я думаю, вы могли бы достичь своей цели таким образом, где вы назначаете каждое количество в sql, а затем, что важно, извлекаете набор записей для начала обработки.

 <?php
    $sql = 'select
                ( select count(*) from `orders` where `status`='pending' ) as `status-count`,
                ( select count(*) from `orders` where `request`='pending' ) as `request-count`'; 

    $result = $conn->query( $sql );
    $rows = $result->num_rows;

    if( $result amp;amp; $rows > 0 ){
        $rs = $result->fetch_all( MYSQLI_ASSOC );
        $status=$rs[0]['status-count'];
        $request=$rs[0]['request-count'];

        if( $status > 0 or $request > 0 ){
            printf('You have %s pending notifications: [ Status=%d, Request=%d ]', ( $status   $request ), $status, $request );
        }else{
            echo 'You have 0 pending notifications.';
        }
    }
?>
  

Верно, что для логики PHP в вопросе упрощенный запрос, такой как показанный @marcin orlowski ниже, даст правильный подсчет и позволит логике работать. это не позволяет вам определить, если вы хотите, какое количество status или requests существует

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

1. не хотел бы даунвотер просветить меня относительно причины отрицательного голосования?