source

MYSQL의 "Enum 필드"로 주문

factcode 2022. 9. 17. 09:49
반응형

MYSQL의 "Enum 필드"로 주문

'noticeBy' enum("'email', 'mobile', 'all', 'auto', 'nothing') 필드가 있지만 NULL DEFAULT 'auto'는 아닙니다.이미 알려진 바와 같이 ENUM 필드에 의한 순서는 인덱스를 기준으로 수행됩니다.하지만 어떻게 그 가치에 따라 질서를 잡을 수 있을까요?

"Sorting(정렬)"에 기재되어 있는 바와 같이

ENUM값은 인덱스 번호를 기준으로 정렬됩니다. 인덱스 번호는 열거형 멤버가 열 사양에 나열된 순서에 따라 달라집니다.예를들면,'b'앞에 정렬하다'a'위해서ENUM('b', 'a'). 빈 문자열은 비어 있지 않은 문자열 앞에 정렬됩니다.NULL값은 다른 모든 열거 값보다 먼저 정렬됩니다.

를 사용할 때 예기치 않은 결과를 방지하려면ORDER BY에 대한 조항ENUM컬럼, 다음 중 하나의 방법을 사용합니다.

  • 를 지정합니다.ENUM알파벳 순으로 나열하다

  • 열이 코딩에 의해 색인 번호별로 정렬되지 않고 사전순으로 정렬되는지 확인하십시오.ORDER BY CAST(col AS CHAR)또는ORDER BY CONCAT(col).

따라서 스트링에 캐스팅된 후 두 번째 글머리 기호별로 열을 정렬할 수 있습니다.

ORDER BY CAST(noticeBy AS CHAR)

이것도 동작합니다.

ORDER BY FIELD(noticeBy, 'all','auto','email','mobile','nothing')

(이것을 실현하기 위한 설정은 없다고 생각합니다만, sort-values를 지정할 필요가 있습니다.)

원하는 대로 순서를 정의할 수 있습니다.

ORDER BY CASE noticeBy
           WHEN 'email' THEN 1
           WHEN 'mobile' THEN 2
           WHEN 'all' THEN 3
           WHEN 'auto' THEN 4
           ELSE 5
         END

그러면 e-메일, 모바일, all, auto, nothing 순으로 행이 반환됩니다.

나에게 가장 좋은 옵션:

ORDER BY FIELD(status, 'publish','not-publish','expirated','deleted'), creation DESC

상태는 BBDD의 필드이며, "의 값은 열거형 옵션에 있는 값입니다.

너도 도움이 되었으면 좋겠어! :)

제 경우 열거형 결과를 "ENUM" 필드에 따라 정렬하고 값이 DESCENDING 순서인지 확인해야 했습니다.열거형에는 다음 값이 있습니다.'Open','Closed'

그래서 내가 사용했을 때ORDER BY CAST(status AS CHAR)결과는 다음과 같습니다.

Closed
Open
Open

하지만 저는Open상태 티켓이 먼저 표시된 후Closed티켓.그래서 다음을 사용했습니다.

ORDER BY CAST(status AS CHAR) DESC

이것이 내가 찾던 명령을 내게 주었다.

Open
Open
Closed

요약:.

사용하고 있는 것만으로ORDER BY CAST도움이 되지 않는 것 같았습니다.결과를 특정 순서로 정렬하려면ASC또는DESC역시, 성공했어.

언급URL : https://stackoverflow.com/questions/17603907/order-by-enum-field-in-mysql

반응형