当前位置: 首页 > 面试题库 >

用yii中的CSqlDataProvider排序

苏伟志
2023-03-14
问题内容

我需要从具有相同条件的称为“医院”的表中获取一些记录:

首先获取与$ city参数匹配的城市。其次,获得与$ state参数相符的状态。第三把剩下的由AZ定购

由于要对resulset进行分页,因此我需要在一个查询中获取所有这些数据,因此我选择了CSqlDataProvider,它会接收sql,计数和分页作为初始配置:http
://www.yiiframework.com/doc
/api/1.1/CSqlDataProvider

因此,我正在考虑将其他字段设置为布尔值,并按主题将它们排序,例如:same_city,same_state。

因此,我们假设这是进入CSqlDatProvider的结果sql(当我用请求中的params值替换时):

select *, 
IF(city like '%San Antonio%', 1, 0) as same_city, 
IF(state=44, 1, 0) as same_state 
from hospitals 
order by same_city DESC, same_state DESC, hospital_name ASC;

如果我将此字符串分配给CSqlDataProvider,则由于我正在对顺序进行硬编码,因此我将无法进行分页…但是我需要此特定顺序,因此记录检索的条件是成功的。

$arHospitals = new CSqlDataProvider($sql, array(
    'totalItemCount'=>$count,
    'pagination'=>array(
        'pageSize'=>30,
    ),
));

如果我运行上面的代码,无论pageSize大小如何,它将返回整个匹配的记录。但是,如果我根据yii文档使用分页,则只会得到分页指示的记录,但对我来说是无意义的顺序…我在字段中需要以下顺序:same_city
DESC,same_state DESC,hospital_name ASC 。

$arHospitals = new CSqlDataProvider($sql, array(
    'totalItemCount'=>$count,
    'sort'=>array(
        'attributes'=>array(
            'asc'=>array('hospital_name'),
            'desc'=>array('same_city', 'same_state'),
        ),
    ),
    'pagination'=>array(
        'pageSize'=>30,
    ),
));

关于如何解决这个问题的任何想法?如果我缺少有关该问题的一些关键信息,请告诉我。


问题答案:

这样的事情应该起作用:

$arHospitals = new CSqlDataProvider($sql, array(
    'totalItemCount'=>$count,
    'sort'=>array(
        'attributes'=>array(
            'virtualFieldName'=>array( //virtual field name
                //give no possibility to sort in any other order than
                'asc'=>'same_city DESC, same_state DESC, hospital_name ASC', 
                'desc'=>'same_city DESC, same_state DESC, hospital_name ASC', 
                'label'=>'Default Sort Order'
            ),
        ),
        'defaultOrder'=>array(
            'virtualFieldName'=>CSort::SORT_ASC, //default sort value
        ),
    ),
    'pagination'=>array(
        'pageSize'=>30,
    ),
));

有关更多信息,请参见http://www.yiiframework.com/doc/api/1.1/CSort#attributes-
detail



 类似资料:
  • 所有包 | 属性 | 方法 包 system.web 继承 class CSqlDataProvider » CDataProvider » CComponent 实现 IDataProvider 源自 1.1.4 版本 $Id: CSqlDataProvider.php 2820 2011-01-06 17:15:56Z mdomba $ 源码 framework/web/CSqlDataPro

  • 本文向大家介绍Yii中CGridView禁止列排序的设置方法,包括了Yii中CGridView禁止列排序的设置方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii中CGridView禁止列排序的设置方法。分享给大家供大家参考,具体如下: Yii中CGridView的功能是用来显示的数据列表。它支持排序,分页,和AJAX数据请求。 下面的代码演示了CGridView禁止列排序的设置方法

  • 本文向大家介绍yii中widget的用法,包括了yii中widget的用法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了yii中widget的用法。分享给大家供大家参考。具体分析如下: WIDGET定义很简单,如果你在/protected/widget/test/下建立了一个名为“testWidget.php”的widget。 在视图中调用需要这样写: testWidget.php文件的

  • 本文向大家介绍Yii中CGridView关联表搜索排序方法实例详解,包括了Yii中CGridView关联表搜索排序方法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii中CGridView关联表搜索排序方法。分享给大家供大家参考。具体实现方法如下: 在Yii CGridView 关联表搜索排序实现方法有点复杂,今天看了一老外写的了篇游戏,下面我整理一下与各位朋友分享一下,相信会

  • Yii

    所有包 | 属性 | 方法 包 system 继承 class Yii » YiiBase 源自 1.0 版本 $Id: yii.php 2799 2011-01-01 19:31:13Z qiang.xue $ 源码 framework/yii.phpYii是一个服务于整个框架辅助类。 它封装了YiiBase由YiiBase提供具体功能实现。 你可以通过改写它定制YiiBase的一些功能。 公共

  • Yii

        Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。     Yiic 生成的应用程序的界面如下: