我想获取表的最后 20 个条目,但按 id 升序排序。
在 Sql 中它不是很复杂:
SELECT *
FROM (SELECT * FROM comments
WHERE postID='$id'
ORDER BY id DESC
LIMIT 20) t
ORDER BY id ASC;
但我想用我的 yii 模型来做,比如:
Comment::model()->findAll($criteria)
但我真的不知道我应该在我的 CDbCriteria 中放什么!
最佳答案
有一种不使用 array_reverse
的方法,如果你想到使用这个 sql:
SELECT * FROM `comments` `t`
WHERE id
in (SELECT id
FROM (SELECT id FROM comments Where postID = xyz ORDER BY id DESC LIMIT 20)
as q)
ORDER BY id ASC
其标准将变为:
$criteria=new CDbCriteria();
$criteria->condition='id in (SELECT id FROM (SELECT id FROM comments Where postID='.$id.' ORDER BY id DESC LIMIT 20) as q)';
$criteria->order='id ASC';
更新 :
对于原始查询,您还可以使用
findBySql
:$sql='SELECT * FROM (SELECT * FROM comments WHERE postID= :postid ORDER BY id DESC LIMIT 20) q ORDER BY id ASC';
$params=array('postid'=>$id);
$comments=Comment::model()->findAllBySql($sql,$params);
这个查询的性能比我之前的查询好。
关于php - Yii:按 id ASC 选择最后 20 个条目顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12941979/