2012-01-13 50 views
0

如何更改find​​查詢順序選項,以便用戶名首先顯示結果?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

你的意思是你要顯示在第一特定用戶排...或想要按用戶名排序..? – 2012-01-13 06:51:31

+0

我想要第一行的特定用戶 – 2012-01-13 08:09:14

+0

你到底想要什麼?你想如何分類你的結果? – Rikesh 2012-01-13 11:18:32

回答

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動態.. ie:「if(User.id =」 – 2012-01-14 00:07:59