Мне нужно получить некоторые записи из таблицы под названием 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 .