同じ条件で Hospitals というテーブルからいくつかのレコードを取得する必要があります。
最初に $city パラメータと市町村が一致するものを取得します。次に、状態が $state パラメータと一致するものを取得します。3 番目に AZ で注文された残りを取得します
resulset をページ分割するので、1 つのクエリですべてを取得する必要があるため、SQL、カウント、およびページ分割を初期構成として受け取る CSqlDataProvider を選択します: 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,
),
));
これを解決する方法のアイデアはありますか? 問題に関する重要な情報が不足している場合は、お知らせください。