Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 특정 단어의 위치를 기준으로 ORDER BY 정렬하는 방법

MySQL에서 특정 단어의 위치를 기준으로 ORDER BY 정렬하는 방법

문자열 안에서 특정 단어가 나타나는 위치를 기준으로 결과를 정렬하려면 ORDER BY 절과 INSTR() 함수를 함께 사용하면 됩니다. INSTR() 함수는 문자열 내에서 지정한 단어가 처음 등장하는 위치(인덱스)를 반환하므로, 이 값을 정렬 기준으로 사용하면 해당 단어가 앞쪽에 있는 레코드부터 순서대로 조회됩니다.

아래 예제를 통해 실제 동작 과정을 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable822(Word text);
Query OK, 0 rows affected (1.11 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable822 values('Forever');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable822 values('ever');
Query OK, 1 row affected (1.31 sec)
mysql> insert into DemoTable822 values('every');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable822 values('everyday');
Query OK, 1 row affected (0.58 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable822;

실행 결과는 다음과 같습니다.

+----------+
| Word      |
+----------+
| Forever  |
| ever     |
| every    |
| everyday |
+----------+
4 rows in set (0.00 sec)

4. 특정 단어 위치 기준으로 정렬하기

다음은 'ever'라는 단어가 문자열의 시작 부분 또는 내부에 포함된 레코드를, 해당 단어의 위치를 기준으로 정렬하는 쿼리입니다.

mysql> select *from DemoTable822 where Word LIKE '%ever%'
   order by INSTR(Word, 'ever'), Word;

이 쿼리의 동작 방식은 다음과 같습니다.

  • WHERE Word LIKE '%ever%': 'ever'라는 단어가 포함된 행만 먼저 필터링합니다.
  • ORDER BY INSTR(Word, 'ever'): 각 문자열에서 'ever'가 처음 나타나는 위치를 기준으로 오름차순 정렬합니다. 위치 값이 작을수록(즉, 단어가 앞쪽에 있을수록) 먼저 출력됩니다.
  • , Word: 위치가 동일한 경우를 대비해 사전순으로 정렬하는 보조 기준입니다.

실행 결과는 다음과 같습니다.

+----------+
| Word     |
+----------+
| ever     |
| every    |
| everyday |
| Forever  |
+----------+
4 rows in set (0.00 sec)

결과를 보면 'ever'로 시작하는 레코드들이 먼저 출력되고, 'ever'가 단어 중간에 포함된 'Forever'는 마지막에 출력됩니다. 이처럼 INSTR() 함수를 활용하면 검색어가 제목이나 본문 앞쪽에 위치한 데이터를 우선적으로 노출하는 검색 결과 정렬 기능 등을 손쉽게 구현할 수 있습니다.