有时我们想按照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 [];
}
}