我希望通过升序获得最后5个记录顺序.
我有一个表名chat_public_msgs,我已插入6个样本数据.我需要id asc的最后5个记录顺序.请检查下面.
表chat_public_msgs-
id username message created
1 smith hi 2014-12-14 10:14:15
2 piter hello 2014-12-14 10:14:20
3 john hi smith 2014-12-14 10:14:28
4 raj aaa 2014-12-14 10:15:22
5 chinu test 2014-12-14 10:15:25
6 piter bbbbb 2014-12-14 10:15:40
Run Code Online (Sandbox Code Playgroud)
查询 -
$fields = array('ChatPublicMsg.message','ChatPublicMsg.created','ChatPublicMsg.username');
$results = $this->ChatPublicMsg->find('all',array(
'fields'=>$fields,
'limit'=>5,
'order'=>array('ChatPublicMsg.id ASC')));
Run Code Online (Sandbox Code Playgroud)
输出 -
id username message created
1 smith hi 2014-12-14 10:14:15
2 piter hello 2014-12-14 10:14:20
3 john hi smith 2014-12-14 10:14:28
4 raj aaa 2014-12-14 10:15:22
5 chinu test 2014-12-14 10:15:25
Run Code Online (Sandbox Code Playgroud)
但是我想要这个 -
id username message created
2 piter hello 2014-12-14 10:14:20
3 john hi smith 2014-12-14 10:14:28
4 raj aaa 2014-12-14 10:15:22
5 chinu test 2014-12-14 10:15:25
6 piter bbbbb 2014-12-14 10:15:40
Run Code Online (Sandbox Code Playgroud)
编辑 -
select * from (
select * from chat_public_msgs order by id desc limit 5
) tmp order by tmp.id asc
Run Code Online (Sandbox Code Playgroud)
我怎么能用CakePhp格式写上面的查询?
小智 5
您可以通过'id'DESC对结果进行排序并将记录数限制为5来执行此操作.然后使用array_reverse()来反转排序.
$fields = array('ChatPublicMsg.message','ChatPublicMsg.created','ChatPublicMsg.username');
$results = $this->ChatPublicMsg->find('all',array(
'fields'=>$fields,
'limit'=>5,
'order'=>array('ChatPublicMsg.id DESC')));
$reverse = array_reverse($results['ChatPublicMsg']);
$results['ChatPublicMsg'] = $reverse;
Run Code Online (Sandbox Code Playgroud)
这假设'id'随每条记录递增.否则,您需要向表中添加时间戳字段并使用此字段进行排序.