3

重複の可能性:
mysql カスタムソート

IDの配列があります:

$ids = array(5, 1, 4, 2, 3);

そして、私はクエリを作成します:

SELECT * FROM Persons
WHERE id IN $ids

そして、私はこのオブジェクトを受け取ります:

1、2、3、4、5

これを配列と同じようにソートすることは可能ですか? 受け取りたい

5、1、4、2、3。

私もPROPELを使っています。Symfony の Propel ORM を使えば、これは可能でしょうか?

4

2 に答える 2

5

mysql では、カスタムの並べ替え順序にフィールド関数を使用できます。例えば:

$ids = array(5, 1, 4, 2, 3);
$ids = implode(',', $ids);
$sql = "SELECT * FROM Persons
        WHERE id IN ($ids)
        ORDER BY FIELD(id, $ids)";
于 2012-06-27T18:28:14.487 に答える
2

クエリを実行した後、PHP で並べ替えることができます。

このようなもの (PHP 5.3+ のみ):

$ids = array(5, 1, 4, 2, 3);
// Run Query...
// assume $results is the result array
usort($results, function($a, $b) use($ids){
    $a = array_search($a['id'], $ids);
    $b = array_search($b['id'], $ids);
    return $a  -$b;
});
于 2012-06-27T18:24:30.247 に答える