3

同じ条件で 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,
    ),
));

これを解決する方法のアイデアはありますか? 問題に関する重要な情報が不足している場合は、お知らせください。

4

1 に答える 1