Php Zend Framework 2中按字段排序的SQL

Php Zend Framework 2中按字段排序的SQL,php,zend-framework2,zend-db,zend-db-select,Php,Zend Framework2,Zend Db,Zend Db Select,在Zend Framework 2中,如何(优雅地)使用闭包按字段排序select语句 我有以下PHP代码: $gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $adapter); $select = $gateway->select(function($select){ $select->where->in('id', array(4, 2, 3, 1)); // insert so

在Zend Framework 2中,如何(优雅地)使用闭包按字段排序select语句

我有以下PHP代码:

$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $adapter);
$select = $gateway->select(function($select){
    $select->where->in('id', array(4, 2, 3, 1));
    // insert some awesome ordering magic here..!
});
我知道你可以很容易地做到这一点:

    ...
    $select->order(array('id ASC'));
    ...
但这只是通过提升
id
值对结果进行排序,我需要按照特定的id序列对它们进行排序(即:按照
4,2,3,1
的顺序进行排序)

这里是否有一个优雅的Zend Framework 2函数,我可以使用它来根据
id
自己进行排序?有效地创建SQL:

select * from table_name 
    where 'id' in (4, 2, 3, 1)
    order by field('id', (4, 2, 3, 1));

我不确定我是否知道你在函数中使用“优雅”一词的意思,但如果它看起来像:

$select->orderInExactlyThatOrder (array (4,2,3,1));

那么不,我不这么认为。

我不确定我是否知道你在函数中使用“优雅”一词的意思,但如果它看起来像:

$select->orderInExactlyThatOrder (array (4,2,3,1));

那么不,我不这么认为。

这是我发现的按字段在Zend 2中排序结果的最佳方法。如果您有任何建议/更好的方法,请提供您自己的解决方案

我最终使用了
Expression
类来给出所需的结果

use Zend\Db\Sql\Expression;

// create the array of ID's we want to order by...
$ids = array(4, 2, 3, 1);

// get our table gateway and our select going...
// don't forget the 'use' syntax here...
$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $db_adapter);
$select = $gateway->select(function($select) use($ids){

    // standard 'in' functionality...
    $select->where->in('id', $ids);

    // use an expression here to achieve what we're looking for...
    $ids_string = implode(',', $ids); // assuming integers here...
    $select->order(array(new Expression('FIELD (id, '. $ids_string .')')));

});

希望这有助于某人!

这是我发现的按字段在Zend 2中排序结果的最佳方法。如果您有任何建议/更好的方法,请提供您自己的解决方案

我最终使用了
Expression
类来给出所需的结果

use Zend\Db\Sql\Expression;

// create the array of ID's we want to order by...
$ids = array(4, 2, 3, 1);

// get our table gateway and our select going...
// don't forget the 'use' syntax here...
$gateway = new \Zend\Db\TableGateway\TableGateway('table_name', $db_adapter);
$select = $gateway->select(function($select) use($ids){

    // standard 'in' functionality...
    $select->where->in('id', $ids);

    // use an expression here to achieve what we're looking for...
    $ids_string = implode(',', $ids); // assuming integers here...
    $select->order(array(new Expression('FIELD (id, '. $ids_string .')')));

});

希望这对某些人有所帮助!

我的意思是“优雅”,即使用内置的Zend功能,而不是在我的函数中毫无意义地堆积PHP代码行,这样做纯粹是为了循环遍历结果集并低效地重新排序。但感谢您的回复:)我的意思是“优雅”,即使用内置的Zend功能,而不是毫无意义地在我的函数中堆积PHP代码行,这样做纯粹是为了循环遍历结果集并低效地重新排序。但是谢谢你的回复:)很有魅力,谢谢你发布你的解决方案。在我看来,在ZF2中,使用表达式是按字段排序的最佳方式。非常有效,感谢您发布解决方案。在我看来,在ZF2中使用表达式是按字段排序的最佳方式。