1

我有一个名为Transaction关系的表User,事务有一个名为的字段balance

数据如下:

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

我需要所有用户的关联数据和最后插入的余额字段User。例如这里id=3是最后插入的数据user_id=22

在原始 SQL 中,我试过这个:

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

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

4

1 回答 1

0

恕我直言,CakePHP 2.x 中的子查询很难看。query()您也可以按照@AgRizzo 在评论中的建议对 SQL 语句进行硬编码并通过 执行它。

但是,在检索组中的最后一个(最大、最旧等)项目时,有一个更优雅的解决方案。

在这个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);
于 2016-01-12T20:25:29.930 回答