我有一个名为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中做到这一点?
答案 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);