2012-01-13 5 views
0

検索クエリの検索オプションを変更して、結果のユーザ名が最初に来るようにするにはどうすればよいですか?Cakephpの結果セットを検索用に設定

$params = array(
         'fields' => array('User.firstname', 'User.lastname', 'User.username', 'User.lat', 'User.lng', 'User.thumbnail_image', 'User.status', '6371 * ACos(Cos(RADIANS(User.lat)) * Cos(RADIANS('.$lat.')) * Cos(RADIANS('.$lng.') - RADIANS(User.lng)) + Sin(RADIANS(User.lat)) * Sin(RADIANS('.$lat.'))) as distance'), 
         'limit' => 15, 
         'recursive' => 1, 
         'offset' => $offset, 
         'order' => array('User.status DESC','User.lastname ASC', 'distance ASC') 
         //'conditions' => array('User.id !=' => $user_id) 
         ); 
       $results = $this->User->find('all', $params); 

私はこれまでのところ、これを持っているが、特定のユーザー(1ユーザー)は、結果の最初の行に来るので、それを変更するように見えることはできません。

これはCakephpに対応していますか?

+0

あなたが最初に特定のユーザーを表示したいわけ行...またはユーザー名で注文したいですか? –

+0

最初の行に特定のユーザーが必要です –

+0

正確に何をしたいですか?結果をどのように並べ替えたいのですか? – Rikesh

答えて

0

必要な生のSQLは次のようになります。あなたがuser_sortを作成するために、仮想フィールドを使用して、ちょうどあなたのための配列に追加する必要がありますCakePHPでは

SELECT 
CASE WHEN User.id = 200 
    THEN 0 
    ELSE 1 END as user_sort, ... rest, of, your, params 
ORDER BY user_sort, ... rest, of, your, ordering, criteria 
LIMIT 15 

。ユーザーモデルでは

user_sortの仮想フィールドを追加します

public $virtualFields = array(
     'user_sort' => 'if(User.id = 200 , 0 , 1)'  
); 

を次にあなたがそうのようなあなたのための配列に追加します。

array('User.user_sort','User.status DESC','User.lastname ASC', 'distance ASC') 
+0

素晴らしい!しかし、これをコントローラーのfind paramsの一部としてどのように含めるのですか?理由は、私はUser.id動的にfind ..に基づいている必要があるということです。ie: "if(User.id =" –

関連する問題