특정 순서로 데이터베이스 레코드의 다중 값 정렬
인덱싱된 키와 인덱싱되지 않은 필드가 있는 테이블이 있다고 가정합니다x_field
. 특정 값이 있는 레코드를 모두 찾아 반환하고, 여러 값을 기준으로 특정 순서로 결과를 정렬해야 합니다.
예를 들어 다음 테이블이 있는 경우:
id | x_field |
---|---|
123 | a |
124 | a |
125 | a |
126 | b |
127 | f |
128 | b |
129 | a |
130 | x |
131 | x |
132 | b |
133 | p |
134 | p |
135 | i |
다음 순서로 결과를 정렬하려고 합니다. 순서는 x_field = 'f', 'p', 'i', 'a'
:
id | x_field |
---|---|
127 | f |
133 | p |
134 | p |
135 | i |
123 | a |
124 | a |
125 | a |
129 | a |
처음에는 다음 쿼리를 사용해 보았습니다.
<code class="language-sql">SELECT * FROM table WHERE id NOT IN (126) ORDER BY x_field 'f', 'p', 'i', 'a'</code>
그러나 이 쿼리는 결과를 반환하지 않습니다.
이 문제를 해결하는 방법은 CASE
문을 사용하여 원하는 순서에 따라 각 x_field
값에 숫자 값을 할당하는 것입니다.
<code class="language-sql">... WHERE x_field IN ('f', 'p', 'i', 'a') ... ORDER BY CASE x_field WHEN 'f' THEN 1 WHEN 'p' THEN 2 WHEN 'i' THEN 3 WHEN 'a' THEN 4 ELSE 5 -- 对不在 IN 子句中的值(例如:x_field = 'b')的回退值 END, id</code>
이 쿼리는 x_field
값이 'f'인 경우 1, 값 2는 'p'인 경우, 값 3은 'i'인 경우, 값 4는 'f'인 경우 할당합니다. 'a' 값과 같습니다. IN
절에 없는 값(예: 'b')의 경우 대체 값 5가 할당됩니다. 그런 다음 결과는 이 숫자 값과 id
필드를 기준으로 오름차순으로 정렬됩니다.
이 접근 방식을 사용하면 x_field
값이 내림차순/오름차순이 아니더라도 결과가 원하는 순서로 정렬됩니다.
위 내용은 특정 순서의 여러 값으로 데이터베이스 레코드를 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!