Laravel MySQL如何以与whereIn子句相同的顺序排序结果

Ela*_*ley 8 mysql eloquent laravel-4

我有两个查询,第一个给我一个id数组,这是一个特定的顺序.然后我将这个ID数组传递给第二个查询,如下所示:

 Operation::whereIn('id', $ids)->get();
Run Code Online (Sandbox Code Playgroud)

但是当我输出该查询的结果时,顺序已经改变,如果数组$ ids类似于(4,2,6,9),这是我想要结果的顺序,输出将给我2 ,4,6,9.我怎么能避免这种情况?

Jar*_*zyk 15

MySQL的排序方式与in where in子句中的顺序相同:

$ids; // array of ids
$placeholders = implode(',',array_fill(0, count($ids), '?')); // string for the query

Operation::whereIn('id', $ids)
   ->orderByRaw("field(id,{$placeholders})", $ids)->get();
Run Code Online (Sandbox Code Playgroud)


Yas*_*vov 5

你可以做

$idsImploded = implode(',',$ids);
Operation::whereIn('id', $ids)->orderByRaw("FIND_IN_SET('id','$idsImploded')")->get();
Run Code Online (Sandbox Code Playgroud)

这是一个问题,MySql 没有按照您指定的顺序返回结果,因此您需要在之后重新排序它们。

类似的解决方案可以在这里找到:避免按 MYSQL IN 关键字排序