2012-06-07 2 views
25

난 무작위 화 단계가 있기 때문에 질의를 실행할 때까지는 알 수없는 항목으로 고정 된 목록을 갖게 될 것입니다.고정리스트에 의한 mysql 순서

select * from items where is_launch_set=1 order by id values (3,11,7,1); 

달성하는 방법에 대한 아이디어를 :

이 is_launch_set은 1,3,7,11를 반환하지만, 아래에 무작위되었다고 가정 :

나는 다음과 같은 일을하고 싶습니다 이? 나는 아마 find_in_set을 생각하고 있었지만 정말로 확신하지 못했습니다.

+0

가능한 복제를 // 유래 .com/questions/6810793 /),이 질문은 좀 더 철저한 대답을 이끌어 냈습니다. –

답변

55

당신은 할 수 있습니다 중 하나를 사용하여 : (HTTP [일부 목록에서 MySQL을 정렬] :

ORDER BY FIND_IN_SET(id, '3,11,7,1') 

또는

ORDER BY FIELD(id, 3, 11, 7, 1) 

또는

ORDER BY CASE id WHEN 3 THEN 0 
       WHEN 11 THEN 1 
       WHEN 7 THEN 2 
       WHEN 1 THEN 3 
         ELSE 4 
     END 
+1

세트에서 찾을 수있는 기능이 확실한가요? 질문하기 전에 그 대답이 될 것이라고 생각했지만 순서는 매번 다르게 보입니다. 설정이나 다른 설정이 있습니까? 현장 답이 좋게 보인다. – timpone

+0

@timpone : 나는 그것이 효과가있을 것이라고 확신합니다. 'FIND_IN_SET (id, '3,11,7,1')'을'SELECT'에 넣어서 기대 한 값을 반환하는지 확인할 수 있습니다. – zerkms

+1

가장 접근이 쉬운 접근 방법에 대한 정보가 있습니까? 'id' 필드에 인덱스를 넣는 것 이외에도 속도를 높이기 위해 할 수있는 일이 있습니까? –