2012-06-27 5 views
2

가능한 중복 :
mysql custom sort정렬 WHERE IN SQL

내가 ID의 배열이 있습니다

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

과 내가 쿼리합니다

SELECT * FROM Persons 
WHERE id IN $ids 
을,

I 및이 개체가 나타날

1, 2, 3, 4, 5

이 배열에서와 동일한 정렬을 가능? 나는

5, 1, 4, 2, 3

나는 또한 추진을 사용 받게하고 싶습니다. 아마도 Symfony의 Propel ORM을 사용하면 가능합니까?

+0

하나의 솔루션은 Foreach 루프 –

+2

@cristi_b에서 쿼리를 실행하는 것입니다 : 나는 하나 개의 쿼리를 실행하는 여러 것보다 더 나은 생각합니다. –

+0

네 말이 맞아. 우리말을 잊어 버렸어. –

답변

4

은 사용자 정의 정렬 순서에 대한 field function를 사용할 수 있습니다. 예를 들어 :

$ids = array(5, 1, 4, 2, 3); 
$ids = implode(',', $ids); 
$sql = "SELECT * FROM Persons 
     WHERE id IN ($ids) 
     ORDER BY FIELD(id, $ids)"; 
+0

나는'FIELD'에 대해 몰랐다. 시원한. –

2

쿼리를 실행 한 후에 PHP로 정렬 할 수 있습니다. 이 같은

뭔가 (PHP 5.3+ 전용) : MySQL의에서

$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; 
});