YII 按照in中内容顺序进行排序,mysql 按in条件中的字段排序
有时我们想按照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)