【问题标题】:Yii CSqlDataProvider custom limitYii CSqlDataProvider 自定义限制
【发布时间】:2014-03-02 12:24:10
【问题描述】:

有没有办法限制CSqlDataProvider?例如,当我将 totalItemCount 强制为 3 时,不考虑结果。

$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
$sql='SELECT * FROM tbl_user';
$dataProvider=new CSqlDataProvider($sql, array(
  'totalItemCount'=>3,    
  'pagination'=>array(
    'pageSize'=>10,
   ),
));

当我尝试限制查询 LIMIT 3 并评论 totalItemCount 行时,我收到:

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: ... LIMIT 3 LIMIT 10

看来无论我做什么 sql 都附加了 LIMIT 10。

【问题讨论】:

  • 你已经解决了吗?
  • 是的,试试我的答案或将分页设置为 false 然后设置限制。

标签: php sql yii


【解决方案1】:

当您使用 CSqlDataProvider 时,您可以限制 sql 中的总项目数。 正如 Yii 的官方文档所写:

与其他数据提供者一样,CSqlDataProvider 也支持排序和分页。它通过使用“ORDER BY”和“LIMIT”子句修改给定的 sql 语句来实现。您可以配置排序和分页属性来自定义排序和分页行为。

CSqlDataProvider

因此您可以通过如下更改 sql 轻松做到这一点:

$sql='SELECT * FROM tbl_user LIMIT 3';

【讨论】:

  • 您的解决方案给出:CDbCommand 无法执行 SQL 语句:SQLSTATE[42000]:语法错误或访问冲突:... LIMIT 3 LIMIT 10
  • 您有语法错误,请检查您的 sql。正如它所说,您的 sql 中有两个限制。或删除 'totalItemCount'=>3
  • 如果我删除限制 3 查询运行但返回 10 个结果。是的,我删除了“totalItemCount”行。
  • 您删除了 'totalItemCount'=>3 吗?
  • 您需要将pagination 设置为false 才能禁用它。然后在这个答案中设置limit
【解决方案2】:

解决办法是在sql语句的最后加上;,这样cpagination就不会添加默认的LIMIT 10子句了。

 $sql = 'SELECT * FROM tbl_user LIMIT 3;';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2012-11-20
    相关资源
    最近更新 更多