簡體   English   中英

Cakephp按結果集順序查找

[英]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中是否有解決方案?

您需要的原始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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM