首页 文章

Cakephp按结果集排序查找

提问于
浏览
0

如何更改查找查询顺序选项,以便首先显示结果的用户名?

$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中有解决方案吗?

1 回答

  • 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')
    

相关问题