2017-02-10 28 views
0

你好,我想我在這裏嘗試一些複雜的東西。也許你可以在這裏幫助我。mysql用userid選擇兩個表並比較時間戳並計算它

我有兩個表:收入和支出。

收益具有作爲日期時間和其他東西的用戶ID,金額,時間戳。當用戶獲得某些東西時,它只有信息。 例子:

id | user_id | amount | timestamp | 
1 | 2  | 1050 | 31days ago | 
2 | 1  | 20  | 10days ago | 
3 | 1  | 10  | 9 days ago | 
4 | 2  | 10000 | 9 days ago | 
... 

賠率,如果用戶是X的收益上面有用戶ID,數量,時間戳日期時間,擁有大約支出條目可以說,1000例

id | user_id | payout_amount | timestamp | 
1 | 2  | 1050   | 30days ago | 
... 

我的問題了。我想計算有多少支出沒有完成(誰沒有支付)。意即。我需要比較payouts.timestamp和具有相同用戶標識的earnings.timestamp,並檢查是否有新條目,然後是支出。如果是的話,那麼算一下它有多少(所以我認爲在這裏它需要首先總結收益)。我甚至不確定這是否可能。

我也可以用PHP做到這一點,如果這不是可以單獨與MySQL。

例如,結果應該是:count = 2,因爲userid 1只有30個收入,所以他沒有達到1000,他也沒有在支出表中輸入。 Userid 2有10000個,但他仍然沒有支付,因爲我們沒有執行它或在支出表中輸入條目。他只是有一箇舊的支出,新的收入沒有支付。

編輯:10天前,事情就是例子。我使用有真正的時間類型 EDIT2:忘了說我這個嘗試之一:

select COUNT(e.amount) FROM earnings e, payouts p where p.payout_timestamp < e.timestamp AND p.user_id = e.user_id GROUP BY p.user_id, e.user_id 

,去這樣的:

| Count(e.amount) | 
| 2    | 
| 1    | 

回答

1

我認爲比較時間戳沒有得到結果是你的唯一途徑需要。如果這些表格正確地反映了收入和付款的歷史記錄,那麼您可以將每位用戶的總收入和付款總結在一起,然後比較每個用戶付費少於收入的user_id。 例如:

SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id; 

總結了收益對於每個用戶,

SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id; 

總結了付款爲每個用戶。

現在離開加入他們的行列,並計算用戶誰比收入減去支付:

SELECT COUNT(e1.user_id) FROM (SELECT user_id, SUM(amount) as amount FROM earnings GROUP BY user_id) as e1 LEFT JOIN (SELECT user_id, SUM(payout_amount) as amount FROM payouts GROUP BY user_id) as p1 ON e1.amount > p1.amount; 

對於你的表例如我的結果是:

+-------------------+ 
| COUNT(e1.user_id) | 
+-------------------+ 
|     2 | 
+-------------------+ 

,並找到用戶付款沒有這樣做只是使用沒有COUNT()函數的同一個查詢:

+---------+ 
| user_id | 
+---------+ 
|  2 | 
|  1 | 
+---------+ 

在我看來,這種方式更多的是sta竹葉提取,因爲它可能有近期付款與付款的那一刻超過總用戶的收入金額較少,如:

1)用戶獲得了1000

2),那麼用戶獲得2000

3)之後,該用戶被納了1000

在這種情況下比較時間戳沒有比較款項量會告訴你,這個用戶沒有支付做,而你仍然需要支付他2000