2016-09-09 77 views
0

我有2個表:如何從2日期起獲得月數和月數的所有月份?

一)客戶

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 

現在我想告訴所有的一個月小號與日和月數哪些客戶端的直到目前的日期才支付。

例如:

clients_id = 1連接日期(conn_date)是2016年6月1日,他只支付了2016年7月3日個月法案至今。所以SQL查詢將被輸出接下來的幾個月:

2016-06 
2016-08 
2016-09 
**2016-07 will not print because he already paid this months bill** 

,我也想展示日和月如的數量:3個月了些日子..

我無法想象如何在SQL查詢應看起來像 ?

回答

-1

通過執行

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陣列獲取conn_date以及paid_month S爲客戶端。

然後foreach日期檢查它是否存在於paid_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)); 
    } 
} 
+0

感謝您的答覆。你能告訴我總工作SQL查詢PLZ? –

+0

我在我的答案中做過。使用PHP來執行兩個sql查詢。然後獲得從conn_date到current_date的所有月份的數組,每月檢查它是否存在於paid_month數組中。如果沒有,那麼顯示該月 –

+0

噢..我的代碼會變得可怕 –

相關問題