我需要从一张名为“医院”的表格中获得一些同样标准的记录:
首先得到哪个城市与$city param匹配。第二,得到与$state参数匹配的状态。第三,得到A-Z公司订购的其余部分
由于要对结果集进行分页,所以我需要在一个查询中获得所有这些数据,因此我选择了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。但是,如果我根据依伊文档使用分页,我只会得到分页所指示的记录,但对我来说没有意义的顺序。我需要字段中的以下命令: 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,
),
));有什么办法解决这个问题吗?如果我漏掉了一些关于这个问题的关键信息,请告诉我。
发布于 2013-12-10 13:17:34
像这样的事情应该有效:
$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。
https://stackoverflow.com/questions/19864784
复制相似问题