2011-09-05 10 views
1

MySQL에서 우선 순위에 따라 행을 선택하고 싶습니다. 나는 가능하면 알고 있지만, 아래의 예를 참조하지 않습니다MySQL의 우선 순위

id name 
1 John 
2 Doe 
3 Mary 
4 Jhonny 

내가 ID를 모르는 가정하면,하지만 구체적인 이유에 의해, 나는 우선 순위에 따라 선택해야합니다 : 3, 2, 1 ...이 경우 메리가 선택됩니다 (# 3). 하지만 5, 2, 1 순서로 선택해야한다면 DOE가 선택 될 것입니다 (# 2).

좋아요, IN (5, 2, 1)을 사용하면됩니다. 문제는 (IN (5, 6, 7)과 같은) 결과가 없으면 적어도 하나의 행이 필요하다는 것입니다.

예를 들어, 5, 6, 7을 선택하십시오. 아무 것도 발견되지 않은 경우 ... 처음 발견 된 항목 (예 : JOHN)을 선택하십시오.

가능합니까?

안녕!

편집 : 방금이 해결책을 생각했지만 얼마나 빨리해야할지 모르지만 잘 작동합니다. 아무도 잃을 수없는 벤치 마크가 더 좋은 응답을 수락하십시오. 분명히

SELECT 5 as ID, 1 as ord 
UNION ALL SELECT 2 , 2 
UNION ALL SELECT 1 , 3 

인가 : 처음에는

ORDER BY FIND_IN_SET(`id`, '5,6,7') DESC 
+0

우선 순위는'2, 4, 1, 3'과 같을 수 있으며 결과로 Doe를 생성 할 수 있습니까? 아니면'조니 (Jhonny) '가 받아 들일만한 결과일까요? –

+0

우선 순위에 맞지 않는 경우 모든 행이 사용될 수 있습니다. –

답변

6
SELECT * 
FROM your_table 
ORDER BY 
(CASE id 
WHEN 5 THEN 1 
WHEN 6 THEN 2 
WHEN 7 THEN 3 
ELSE id+10 
END) 
LIMIT $some_limit; 

트릭 그래서, 5 일치하는 ID가 우선 순위 1을 줄 것이다 order by

에서 사용을 할 수 있습니다 : - 그래서 경우의 전체 예를하자 우선 순위 2를 부여하십시오.
ID가 7이면 우선 순위 3이 부여됩니다.
이면 최소 ID가 반환됩니다.

당신을 가정 10

는 ID에 대한 서명되지 않은

+0

그러나 목록에 ID가 하나도없고 $ some_limit이 10이면 원하는대로 1 개가 아닌 처음 10 개의 결과가 표시됩니다. –

+0

OP는 적어도 하나의 행을 원하기 때문에 일치 할 것입니다. – ajreal

0

당신이 열을 주문 ID 열을 매핑 필요의 특별한 조합의 도움으로 그것을 할 수 있도록 (첫번째 열은 ID가 2 차 명령이있다)? 6
일치하는 ID 것이다,

SELECT m.* from MyTable m 
    LEFT OUTER JOIN (
     SELECT 5 as ID, 1 as ord 
     UNION ALL SELECT 2 , 2 
     UNION ALL SELECT 1 , 3 
    ) o ON m.ID = o.ID 
ORDER BY COALESCE(o.ord, 100) 
0

SELECT U.username, FIND_IN_SET BY tbluser U ORDER 이드 (username, '테스터') DESC, 사용자 이름 ACS

이 우선 순위 (제공 사용 먼저) "테스터"를 입력 한 다음 AZ를 정렬하십시오.