Kohana Database Query Builder自定义排序顺序(MySQL中的"ORDER BY Field(id,1,3,2)")

1al*_*len 4 builder sql-order-by kohana

我有一组要选择的ID,所以我要求:

$ids = array( 1, 2, 3, 4, 5 );
$q = DB::select('field1', 'field2', 'field3')->
     from('work')->
     where('field1', 'in', $ids)->execute();
Run Code Online (Sandbox Code Playgroud)

我如何按照我的自定义顺序对它们进行排序,比如MySQL的"ORDER BY Field"呢?

Spa*_*III 7

查看DB :: Expr

您可以像这样使用它:

->order_by(DB::Expr('FIELD(`field`, 3,1,2)'))
Run Code Online (Sandbox Code Playgroud)

请注意,您必须手动转义内容

  • 很好的答案,但实际上你可以使用` - > order_by('FIELD("id",1,2,3)')`,不需要DB :: expr.仍然需要正确地逃避字段值,这可以用` - > order_by('FIELD("id",:f1,:f2)') - > param(':f1',$ f1) - > param完成(':f2',$ f2)`. (2认同)