我有两张桌子:
a)客户
clients_id conn_date
=======================
1 2016-06-01
2 2016-07-17
3 2016-06-22
4 2016-09-03
b)clients_pay_bill
cpp_id clients_id paid_month
===================================
1 1 2016-07-03
2 2 2016-07-22
3 4 2016-09-09
4 2 2016-07-22
现在,我想显示所有月份 s ,其中包含直到当前日期才支付客户的天数和月数。
例如:
clients_id = 1
连接日期(conn_date) 2016-06-01 ,他直到现在才支付 2016-07-03 月帐单。所以sql查询将在几个月后输出:
2016-06
2016-08
2016-09
**2016-07 will not print because he already paid this months bill**
我还希望显示天数和月数,例如:某些天的3个月......
我无法想象sql查询应该如何?
答案 0 :(得分:-1)
通过执行
获取客户端的conn_date
和paid_month
SELECT conn_date FROM clients WHERE client_id = <your_client_id>
并且
SELECT paid_month FROM clients_pay_bill WHERE clients_id = <your_client_id>
然后你可以用PHP来获取从conn_date到current_date的所有日期的数组。
然后foreach日期检查pay_month数组中是否存在。如果不是,则显示。
这是伪代码
$start = (new DateTime(conn_date));
$end = date(Y-m-d);
$interval = DateInterval::createFromDateString('1 month');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
if(!in_array($dt,$paidMonthArray)) {
display($dt(Y-m));
}
}