我想获取表的最后 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/

10-10 12:36