#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. не хотел бы даунвотер просветить меня относительно причины отрицательного голосования?