我有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美元,如果在该用户之前没有付款,他们的上次付款日期为否(获得所有收入)
然后将结果添加到表“付款”。新的Payout_Date到Payment_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
如何在Codeignaiter Controller和Model上编写
对不起我的英语语法错误。
答案 0 :(得分:0)
在考虑CodeIgniter之前,请考虑要运行的数据库查询。当满足两个条件时,您需要来自两个表的所有数据。所以当你的收入超过10美元并且(我猜是)当From_Date在最新的Payment_Date之前或之前,但是在之前的Payment_Date之后,你想要一起加入这些表并显示结果。
在CodeIgniter中,它们为您提供了一种更宽容的编写查询的方式,但机制仍然相同。
所以你可能会写一个单一的,粗糙的查询,一次完成这一切,但将它分成几个查询要容易得多:
我会在查询3中向您展示您想要的最佳猜测,然后指向the CI Documentation。我假设您在扩展CI_Model的类中执行此查询。我试过使用最简单的读取语法。此外,我假设您将从“收入”列中的值中删除$this->db->select('*');
$this->db->select($currentPaymentDateFoundInQuery1'. AS Payment_Date'); // add a column with Payment_Date
$this->db->from('User');
$this->db->join('Earning', 'Earning.Userid=User.id');
$this->db->where('Earning >', 10);
$this->db->where('Date >', $previousPaymentDateFromQuery2);
$this->db->where('Date <=', $currentPaymentDateFoundInQuery1);
$query = $this->db->get();
,并使用一个数字。 (我没有测试过这段代码,但它应该让你接近。)
matrix
这可能不是您正在寻找的,但它应该让您开始。第二个select语句只是在结果中使用当前付款日期创建一个额外列。