Cakephp查询从多用户获取最后一个字段数据

时间:2016-01-12 19:03:57

标签: sql cakephp orm cakephp-2.x cakephp-2.6

我有一个名为Transaction的表格,关系为User,交易有一个名为balance的字段。

数据如下:

id  user_id  balance 
1   22       365
2   22       15
3   22       900
4   32       100
4   32       50 

我需要User的所有用户关联数据和最后一次插入余额字段。例如,此处id=3user_id=22的最后插入数据。

在原始SQL中我试过这个:

select * from transactions where id in (select max(id) from transactions group by user_id)

如果我在这里添加一个内连接,我知道我也可以检索用户数据。但是我怎么能在CakePHP中做到这一点?

1 个答案:

答案 0 :(得分:0)

恕我直言,subqueries在CakePHP 2.x中很难看。你也可以硬编码SQL语句并通过query()执行它,正如@AgRizzo在评论中所建议的那样。

然而,当涉及到检索组中的最后一个(最大的,最旧的等)项时,有一个更优雅的解决方案。

在这个SQL Fiddle中,我已经应用了

中描述的技术

CakePHP 2.x的等价物是:

$this->Transaction->contains('User');

$options['fields'] = array("User.id", "User.name", "Transaction.balance");

$options['joins'] = array(
    array('table' => 'transactions',
        'alias' => 'Transaction2',
        'type' => 'LEFT',
        'conditions' => array(
            'Transaction2.user_id = Transaction2.user_id',
            'Transaction.id < Transaction2.id'
        )
    ),
);

$options['conditions'] = array("Transaction2.id IS NULL");

$transactions=$this->Transaction->find('all', $options);