programing

문자열 목록별 SQL 순서?

i4 2023. 8. 29. 20:09
반응형

문자열 목록별 SQL 순서?

표를 선택하여 특정 키워드 또는 키워드 목록별로 결과를 정렬하고 싶습니다.예를 들어 다음과 같은 테이블이 있습니다.

ID  Code
1   Health
2   Freeze
3   Phone
4   Phone
5   Health
6   Hot

그래서 단순하게 하는 것보다.Order By asc/desc그러고 싶어요.order by Health, Phone, Freeze, Hot이것이 가능합니까?

사용해 보십시오.

select * from table 
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')

여기 끔찍한 해킹이 있습니다.

select * from table
order by (
     case Code 
     when 'Health' then 0 
     when 'Phone' then 1
     when 'Freeze' then 2
     when 'Hot' then 3
     end
)

키워드 테이블과 함께 가입할 수 있으며, 시퀀스 열과 키워드별 주문을 포함할 수 있습니다.순서.

키워드 표의 예는 다음과 같습니다.

ID  Code     Sequence
1   Health   1 
2   Freeze   3
3   Phone    2
4   Hot      4

그러면 가입할 수 있습니다.

SELECT *
FROM   MyTable INNER JOIN
          Keywords ON Keywords.ID = MyTable.KeywordID
ORDER BY Keywords.Sequence

이것이 당신에게 아이디어를 주기를 바랍니다.

요즘 MySQL은 다음과 같은 기능을 가지고 있습니다.find_in_set()

다음과 같이 사용합니다.

select * from table 
order by find_in_set(Code,'Health','Phone','Freeze','Hot')

이것은 단지 하나의 할인입니까?ORDER BY아니면 여기에 명시된 것보다 더 많은 가치에 따라 자주 하고 싶은 것이 있습니까?

지정한 순서는 임의이므로 원하는 것을 달성하기 위해 식별자가 지정되어야 합니다.

SELECT 
    ID,
    Code,
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END As OrderBy
FROM Table
ORDER BY 
    OrderBy

또는

SELECT 
    ID,
    Code
FROM Table
ORDER BY 
    CASE Code
        WHEN 'Health' THEN 1
        WHEN 'Phone' THEN 2
        WHEN 'Freeze' THEN 3
        WHEN 'Hot' THEN 4
    END

(MySQL에 대해 잘 모르지만 위의 내용은 SQL Server에서 사용할 수 있습니다.MySQL의 구문은 크게 다르지 않습니다.)

이 작업을 자주 수행하려면 테이블에 OrderBy 열을 만들거나 이 테이블에 대한 FK 링크가 있는 OrderBy 테이블을 만들고 해당 테이블에 OrderBy 숫자 필드를 지정합니다.

안녕하세요. 이것은 SQL Server 쿼리입니다. 하지만 MySQL에서도 이 작업을 수행할 수 있다고 확신합니다.

SELECT ID,  Code
FROM x
ORDER BY 
     CASE Code WHEN 'Health' THEN 1
               WHEN 'Phone' THEN 2
               WHEN 'Freeze' THEN 4
               WHEN 'Hot' THEN 5
     ELSE 6 END ASC
     , Code ASC

커플 옵션:

  1. 원하는 숫자의 주문과 함께 주문 코드 열 추가

  2. 이 테이블 ID 및 주문 코드에 FK가 있는 테이블 추가

예, 결과를 코드 테이블에 결합한 다음 코드별로 순서를 지정합니다.코드 순서

편집: 코드 테이블 사용 설명 중...

별도의 코드 테이블(CodeId, Code, CodeOrder)을 만들고 이 테이블에 참여하여 코드오더별로 순서를 지정합니다.코드와 주문을 쉽게 변경할 수 있기 때문에 제안된 (케이스...) 해킹으로 주문을 하는 것보다 더 좋습니다.

언급URL : https://stackoverflow.com/questions/1244028/sql-order-by-list-of-strings

반응형