我的查询结果是offset = 0和limit = 10正好是一行。
当我使用offset = 1时,应该没有结果。
但是有一个像
这样的查询$query = Yii::app()->db->createCommand();
$criteria = new CDbCriteria();
$criteria->addCondition('f.deleted = 0 AND b.version = f.version');
$criteria->params = [];
if ($idUserAnswerer)
{
$query->leftJoin('bar AS b', 'b.idF = f.id');
$criteria->addCondition('f.idUserOwner = :idUserOwner');
$criteria->params['idUserOwner'] = $idUserOwner;
}
$query->select('*')
->from('foo AS f')
->where($criteria->condition)
->bindValues($criteria->params);
$query->order('FIELD(t.type,
' . X::X_TYPE_ID_A . ', ' . X::X_TYPE_ID_B . ',
' . X::X_TYPE_ID_C . '), b.created_time, b.votes DESC');
$data = $query->limit(10, 2)->queryAll();
(提示:我必须使用$criteria
,因为我必须在某个时候使用inCondition)
我仍然得到这一行。但通常(当我直接在我的数据库中进行查询时)我不应该得到结果。
为什么Yii吐出这一行的任何想法?
答案 0 :(得分:2)
这是查询构建器的问题。您需要特定的订单,绑定值应该在查询结束时完成。
这是因为Yii在绑定值时会执行prepare语句。然后它缓存此声明。然后您附加订单并限制它。执行查询时,将使用先前的缓存语句,而不使用顺序和限制。我认为这是设计的。
所以总是最后绑定值:
$query = Yii::app()->db->createCommand();
$data = $query->select('*')
->from('tbl AS t')
->where('idCategory=:catid')
->order('id DESC')
->limit(2, 2)
->bindValues(array(':catid' => 151))
->queryAll();
答案 1 :(得分:0)
尝试下面我希望它能起作用......
$query = Yii::app()->db->createCommand()
->select('*')->from('tblA')->limit(10,1)->queryAll();
参考:http://www.yiiframework.com/doc/guide/1.1/en/database.query-builder#sec-8
编辑:
$rows = (new \yii\db\Query())
->select('id, name')
->from('user')
->limit(10)
->all();
// which is equivalent to the following code:
$query = (new \yii\db\Query())
->select('id, name')
->from('user')
->limit(10);
// Create a command. You can get the actual SQL using $command->sql
$command = $query->createCommand();
// Execute the command:
$rows = $command->queryAll();