У меня есть Payment Table
. В этой таблице платежей есть paymentCusId(It is Customer Id)
, paymentCredit
и paymentCredit
и paymentDebit
Д. Как я могу показать, если баланс клиентов составляет менее 50 евро, я хочу показать, сколько клиентов балансирует менее 50 евро.
Например, 5 клиентов балансируют менее 50.
Могу ли я решить это с помощью SQL-запроса или условий php?
Код ниже:
$this->db->select('payment.paymentCusId, sum(paymentCredit) - sum(paymentDebit)');
$this->db->from('payment');
$this->db->where('sum(paymentCredit) - sum(paymentDebit) <', 50);
$query_debit = $this->db->get();
$number = $query_debit->num_rows();
echo $number;
Этот код не работает. Что я могу сделать, чтобы показать количество клиентов менее 50 евро?
Запрос, который вы пытаетесь выполнить, имеет две ошибки.
1 - Для того, чтобы вы выполняли функции, которые должны быть объединены, вам нужно сгруппировать результат, используя GROUP BY
2 - Функции агрегации в предложении WHERE не работают, вам нужно поместить его в предложение having.
Для вашего случая правильный запрос:
$this->db->select('payment.paymentCusId, sum(paymentCredit) - sum(paymentDebit)');
$this->db->from('payment');
$this->db->group_by('payment.paymentCusId');
$this->db->having('sum(paymentCredit) - sum(paymentDebit) <', 50);
$query_debit = $this->db->get();
$number = $query_debit->num_rows();
echo $number;
Для получения дополнительной информации о построителе запросов codeigniter проверьте их документацию
Хороший способ выяснить, правильно ли ваш запрос, прежде чем пытаться получить результаты или num_rows, и т.д., Это проверить, что он имеет ошибку:
$error = $this->db->error();
if($error) {
echo $error['message'];
echo $error['code'];
}