문제

미리 정해진 순서 (즉)로 선택 문을 수행 할 수 있습니까? IDS 7,2,5,9 및 8 선택 그리고 그 순서대로 그들을 반환합니다, ID 필드에 지나지 않습니까?

진술은 (7,2,5,9,8)의 id가있는 테이블에서 ID를 선택합니다. (8,2,5,9,7)의 ID가있는 테이블에서 ID를 선택하십시오. 둘 다 같은 순서로 반환합니다.

도움이 되었습니까?

해결책

나는 이것이 가능하다고 생각하지 않았지만 여기에 블로그 항목 그것은 당신이 뒤 따르는 일의 유형을하는 것 같습니다.

SELECT id FROM table WHERE id in (7,2,5,9,8) 
ORDER BY FIND_IN_SET(id,"7,2,5,9,8");

다른 결과를 줄 것입니다

SELECT id FROM table WHERE id in (7,2,5,9,8) 
ORDER BY FIND_IN_SET(id,"8,2,5,9,7");

find_in_set 위치를 반환합니다 id 두 번째 주장에서 위의 첫 번째 경우에는 id OF 7은 세트에서 1 위치 1, 2에서 2 등에 있습니다. MySQL은 내부적으로 다음과 같은 것을 작동합니다.

id | FIND_IN_SET
---|-----------
7  | 1
2  | 2
5  | 3

그런 다음 결과에 따라 주문합니다 FIND_IN_SET.

다른 팁

필드 별 주문 (ID, 7,2,4,5,8)이 가장 좋은 방법이지만 여전히 추악합니다.

IDS를 7,2,5, ... 조례 1,2,3에 맵핑하고 그 표현으로 주문하는 사례 표현을 포함시킬 수 있습니까?

모든 주문은 키워드별로 주문에 의해 수행되지만 오름차순과 내림차순 만 정렬 할 수 있습니다. PHP와 같은 언어를 사용하는 경우 일부 코드를 사용하여 정렬 할 수 있지만 MySQL만으로는 가능하지 않다고 생각합니다.

이것은 Oracle에서 작동합니다. MySQL에서 비슷한 일을 할 수 있습니까?

SELECT ID_FIELD
FROM SOME_TABLE
WHERE ID_FIELD IN(11,10,14,12,13)
ORDER BY
  CASE WHEN ID_FIELD = 11 THEN 0
       WHEN ID_FIELD = 10 THEN 1
       WHEN ID_FIELD = 14 THEN 2
       WHEN ID_FIELD = 12 THEN 3
       WHEN ID_FIELD = 13 THEN 4
  END

Autonumber 필드가있는 온도 테이블을 만들고 원하는 순서로 삽입해야 할 수도 있습니다. 그런 다음 새 Autonumber 필드를 정렬하십시오.

음, 실제로는 아닙니다. 당신이 얻을 수있는 가장 가까운 것은 아마도 다음과 같습니다.

SELECT * FROM table WHERE id IN (3, 2, 1, 4) ORDER BY id=4, id=1, id=2, id=3

그러나 당신은 아마 그것을 원하지 않을 것입니다 :)

테이블에 무엇이 있는지에 대한 자세한 정보없이 더 구체적인 조언을 제공하기는 어렵습니다.

그것은 해킹 (아마도 느리게)이지만, 당신은 모두와 함께 효과를 얻을 수 있습니다.

SELECT id FROM table WHERE id = 7
UNION ALL SELECT id FROM table WHERE id = 2
UNION ALL SELECT id FROM table WHERE id = 5
UNION ALL SELECT id FROM table WHERE id = 9
UNION ALL SELECT id FROM table WHERE id = 8;

편집하다: 다른 사람들은 문서화 된 find_in_set 함수를 언급했습니다 여기.

당신은 여기에서 빨리 답을 얻습니다.

내가 이것을 묻는 이유는 복잡한 다차원 배열을 정렬하지 않기 위해 생각할 수있는 유일한 방법이기 때문입니다. 나는 분류하기가 어렵다고 말하는 것이 아니라, 직선 SQL로 그것을 할 수있는 더 간단한 방법이 있다면 왜 그렇지 않습니까?

Oracle 솔루션 중 하나는 다음과 같습니다.

SELECT id FROM table WHERE id in (7,2,5,9,8)
ORDER BY DECODE(id,7,1,2,2,5,3,9,4,8,5,6);

이것은 각 ID에 주문 번호를 할당합니다. 작은 값 세트에 대해서는 잘 작동합니다.

내가 생각할 수있는 가장 좋은 것은 두 번째 열 OrderColumn을 추가하는 것입니다.

7 1
2 2
5 3
9 4 
8 5

그리고 OrderColumn의 주문을 수행하십시오

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top