Сортировка с CSqlDataProvider в yii

Мне нужно получить некоторые записи из таблицы под названием Hospitals с теми же критериями:

Сначала получите те, которые соответствуют городу с $ city param. Вторые получают те, которые соответствуют совпадению с параметром $ state. Третий получает остальные, заказанные AZ

Мне нужно получить все из них в одном запросе, так как я собираюсь выполнить разбиение по страницам на resulset, поэтому я выбираю CSqlDataProvider, который получает sql, count и pagination в качестве начальной конфигурации: http://www.yiiframework.com/doc /api/1.1/CSqlDataProvider

поэтому я подумывал о том, чтобы создавать дополнительные поля в виде булевых элементов и сортировать их по тегам, например: same_city, same_state.

поэтому давайте предположим, что это приведенный sql (когда я заменил значения params из запроса), который идет на CSqlDatProvider:

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( '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 .