MySQL 查询中 where in 如何保持顺序

select * from table_name where id in ()

如上sql语句,MySQL会自动按主键自增排序,要是按IN中给定的顺序排序,写法如下:

SELECT * from `models` where `id` in (26612,26611,26610) order by field(id,26612,26611,26610);

Laravel 实例

$saves = VisitHistory::where('user_id', $user->id)
    ->orderBy('id', 'desc')
    ->offset($offset)
    ->limit($limit)
    ->get();

$ids = $saves->pluck('post_id')->toArray();

$ids_ordered = implode(',', $ids);

$items = Post::with('user:id,name,is_master,avatar_url')
    ->whereIn('id', $ids)
    ->where('status', 1)
    ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
    ->get();