2012-01-13 4 views
0

Как изменить параметр запроса на поиск, чтобы имя пользователя было первым для результата?Cakephp order by result set for find

$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 вам нужно может выглядеть следующим образом:

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 

В CakePHP Вы должны использовать виртуальное поле для создания user_sort, а затем просто добавить его в массив заказа.

В модели пользователя добавить виртуальное поле для 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

отлично! но как бы вы включили это как часть параметров поиска в контроллер? Причина в том, что мне нужно иметь динамику User.id на основе find .. ie: "if (User.id =" –

Смежные вопросы