Вы можете упростить эту задачу, позволив MySQL сделать больше работы за вас.
У вас есть массив $receivers
, который предположительно содержит идентификаторы для подписчиков (получателей) чего-либо. (Я могу использовать получателя и абонента взаимозаменяемо.)
Функция status()
извлекает из базы данных value
для каждого получателя, где subscription_end_date
равно нулю. Я собираюсь предположить, что для каждого подписчика существует только одна строка, поскольку вы возвращаете последний результат только через переменную $rowservice
.
Из вашего кода неясно, хотите ли вы получить число получателей с value
, отличным от 0, или если вам нужна сумма всех ненулевых значений. Тогда возникает вопрос:
- Хотите узнать, сколько подписчиков имеют ненулевые значения? или
- Хотите узнать сумму всех значений для подписчиков с ненулевыми значениями?
К счастью, оба из них можно легко найти:
Сколько получателей имеют ненулевые значения?
$allreceivers = implode(',', $receivers);
$query = "SELECT COUNT(id) AS total_receivers
FROM user
WHERE subscription_end_date IS NULL
AND value != 0
AND id IN ($allreceivers);";
$result = mysql_query($query, $d1);
$row = mysql_fetch_array($result);
$total_receivers = $row['total_receivers'];
echo "The number of receivers having status (value) other than 0 is $total_receivers";
Какова сумма всех значений приемника?
$allreceivers = implode(',', $receivers);
$query = "SELECT SUM(value) AS receiver_value_sum
FROM user
WHERE subscription_end_date IS NULL
AND id IN ($allreceivers);";
$result = mysql_query($query, $d1);
$row = mysql_fetch_array($result);
$receiver_value_sum = $row['receiver_value_sum'];
echo "The sum of receiver values is $receiver_value_sum";