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
'source' 카테고리의 다른 글
리액트 라우터의 링크 컴포넌트 밑줄을 없애는 방법 (0) | 2022.09.18 |
---|---|
MariaDB 및 Galera Cluster를 사용하여 ORACLE과 같이 시퀀스 번호를 생성하는 방법 (0) | 2022.09.17 |
최고의 자바 난독화기? (0) | 2022.09.17 |
Python에서 터미널 지우기 (0) | 2022.09.17 |
mysql2 gem으로 앱을 설치하려고 하면 오류가 발생했습니다. (0) | 2022.09.17 |