prosource

MySQL - 관련성별 주문 방법? INNODB 표

probook 2023. 11. 4. 10:52
반응형

MySQL - 관련성별 주문 방법? INNODB 표

저는 '카드'라고 불리는 INNODB 테이블에 약 20,000개의 행이 있으므로 FULLTEXT는 옵션이 아닙니다.

이 표를 고려해 주시기 바랍니다.

id     |     name     |     description
----------------------------------------------------------
1        John Smith       Just some dude
2        Ted Johnson      Another dude
3        Johnathan Todd   This guy too
4        Susan Smith      Her too
5        Sam John Bond    And him
6        John Smith       Same guy as num 1, another record
7        John Adams       Last guy, promise

예를 들어, 사용자가 'John'을 검색한다고 하면, 결과 집합은 다음과 같은 순서가 되기를 바랍니다.

7        John Adams
6        John Smith
3        Johnathan Todd
5        Sam John Bond
2        Ted Johnson

저희는 '존 스미스'를 한 번밖에 뽑지 않았으니, 가장 최근에 출품한 작품입니다.제 자료에 의하면, 모든 이름은 같은 사람의 이름이고, 존 스미스라는 두 명의 다른 남자는 걱정할 필요가 없습니다.아이디어?제가 설명할 수 있는 것이 있으면 알려주세요.

버전 1:

SELECT max(id) id, name
  FROM cards
 WHERE name like '%John%'
 GROUP BY name
 ORDER BY CASE WHEN name like 'John %' THEN 0
               WHEN name like 'John%' THEN 1
               WHEN name like '% John%' THEN 2
               ELSE 3
          END, name

버전 2:

SELECT max(id) id, name
  FROM cards
 WHERE name like '%John%'
 GROUP BY name
 ORDER BY CASE WHEN name like 'John%' THEN 0
               WHEN name like '% %John% %' THEN 1
               WHEN name like '%John' THEN 2
               ELSE 3
          END, name

언급URL : https://stackoverflow.com/questions/1588710/mysql-how-to-order-by-relevance-innodb-table

반응형