我的数据库上有4个表
表"用户"
id | user
-----------
55 | Jhon
56 | Krish
57 | Boss
表"支出"
id | Payout_Date
------------------
1 | 31.10.2015
2 | 24.10.2015
3 | 17.10.2015
表"盈利"
Userid | Date | Earning
------------------------------------
55 | 31.10.2015 | 5$
56 | 31.10.2015 | 1$
57 | 31.10.2015 | 3$
55 | 30.10.2015 | 5$
56 | 30.10.2015 | 12$
57 | 30.10.2015 | 0$
55 | 29.10.2015 | 5$
56 | 29.10.2015 | 4$
当我添加新的付款日期(Payout_date)时,我想找到谁在新支付日期之间的最后一次支付日期内赚取>10美元,如果没有在该用户之前支付,他的最后一次付款日期为否(获取他的所有收入)。
然后将结果添加到表"Payment"中,并将新的Payout_Date添加到Payment_Date。他们的最后付款日期是From_Date。
表"付款"
id | Userid | From_Date | Payment_Date | Earning | Status
------------------------------------------------------------------
1 | 55 | 24.10.2015 | 31.10.2015 | 12$ | 0
2 | 56 | 24.10.2015 | 31.10.2015 | 17$ | 0
如何将其写在Codeigniter控制器和模型上?
您需要将问题分解为多个部分:查找当前付款日期,查找用户上次付款时间,添加此后的收入,如果>10美元则进行筛选。
以下是一个视图的示例(我实际上没有运行这个,所以可能存在语法错误)
SELECT Earning.Userid, sum(Earning.Earning) earning_since_last
FROM
/* Find current payout Date */
(SELECT MAX(Payout_Date) current_payout_date FROM PAYOUT) as curr_payout,
/* find last time user paid */
(SELECT Userid, MAX(Payout_Date) last_payout_date
FROM PAYOUT
GROUP BY Userid) last_payout,
Earning
WHERE Earning.date <= curr_payout.current_payout_date
and last_payout.Userid = Earning.Userid
and earning.date > last_payout.last_payout_date
GROUP BY Earning.Userid
HAVING SUM(Earning.Earning) >= 10