首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CSqlDataProvider的Yii分页结果

使用CSqlDataProvider的Yii分页结果
EN

Stack Overflow用户
提问于 2014-04-30 13:20:52
回答 1查看 1K关注 0票数 0

我正在与CSqlDataProvider一起使用分页。结果正确地显示在分页的前20页或第一页。当我在网页上看到日志消息时,它使用的查询实际上是为所有页面选择前20行,这就是问题所在。我不知道怎么改正它。

我的控制器有代码:

代码语言:javascript
复制
public function actionLink()
 {
      $sql = "SELECT Ordernumber, Order_Date
                FROM [Orders]
                WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014'";

      $count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM (' . $sql . ') as count_alias')->queryScalar();
      $dataProvider = new CSqlDataProvider($sql, array('keyField' => 'Order_Date',
           'totalItemCount' => $count,
           'pagination' => array(
           'pageSize' => 20,),));

      $this->render('link',  array('dataProvider' => $dataProvider));
    }}      

现在它用于计数的查询是正确的(日志消息):

查询SQL:

代码语言:javascript
复制
SELECT COUNT(*) FROM (SELECT Ordernumber ,Order_Date
FROM [Orders]
WHERE CAST(Order_Date As Date) BETWEEN '01-01-2014' AND '31-01-2014') as count_alias

它用于第2页的查询是(日志消息):

代码语言:javascript
复制
 SELECT * FROM (SELECT TOP 20 * FROM (SELECT TOP 40 Ordernumber,Order_Date
 FROM [Orders]
 WHERE CAST(Order_Date As Date) 
 BETWEEN '01-01-2014' AND '31-01-2014') as [__inner__]) as [__outer__]

实际上,上面的查询将作为前20行给出结果。每一页都有同样的问题。它给出的结果与前20行相同。因此,第3页变成(日志消息):

代码语言:javascript
复制
 SELECT * FROM (SELECT TOP 20 * FROM (SELECT TOP 60 Ordernumber,Order_Date
 FROM [Orders]
 WHERE CAST(Order_Date As Date) 
 BETWEEN '01-01-2014' AND '31-01-2014') 
 as [__inner__] ) as [__outer__]

我看到的唯一问题是它用于检索页面2,3的数据的查询。诸若此类。对于每个页面,它都返回相同的数据,因为每次选择前20行。我不明白这种行为的原因。当您在分页期间使用SQL SERVER作为DB和CSqlDataProvider作为数据提供程序时,查询实际上是什么样的呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 14:25:55

我找到了解决办法。我不得不将rewriteLimitOffsetSql函数在CMssqlCommandBuilder中更改为:

代码语言:javascript
复制
return $sql." OFFSET ".$offset." ROWS FETCH NEXT ".$limit." ROWS ONLY";

只有这一行函数,并删除其余的代码。很好,SQL SERVER启动了对偏移和提取的支持。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23389261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档