YII 按照in中内容顺序进行排序,mysql 按in条件中的字段排序

蛰伏已久 蛰伏已久 2018-07-06

有时我们想按照in中指定的顺序返回查询结果,mysql举例如下

SELECT * FROM `subject` WHERE id in(18,16,19) order by field(id,18,16,19)

在YII中也可以,找了半天,纪录一下

以下两种方式都可以

$orderBy = (new \yii\db\Query())
->select('*')
->from('product')
->orderBy([new \yii\db\Expression('FIELD (id, 3,1,2,4)')])
->all();

或者这样

if ( in_array(2, $status) ) {
	$query->orderBy(["FIELD(`id`,3,2,1)"=>true, 'g.start_time'=>'asc']);
} else {
	$query->orderBy(["FIELD(`id`,4,5,6)"=>true, 'g.start_time'=>'desc']);
}


自己写的一个接口,传入id数组,返回资讯

public static function getNewsByIds($ids){

    if($ids){
        $ids_str=implode(',',$ids);
        $order="FIELD(`id`,$ids_str)";
        $news=(new Query())
            ->select(['qftt_news.*'])
            ->from('qftt_news')
            ->where(['in','id',$ids])
            ->orderBy([$order=>true])
            ->all();

        return $news;
    }else{
        return [];
    }

}


分享到

点赞(0)