programing

MySQL을 "최적 일치"별로 주문

projobs 2022. 9. 15. 23:04
반응형

MySQL을 "최적 일치"별로 주문

실시간 검색을 사용하여 해당 테이블을 검색할 수 있는 단어와 입력 필드가 포함된 테이블이 있습니다.현재 다음 쿼리를 사용하여 테이블을 검색합니다.

SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY word ASC

단어의 선두에 문자열이 있는 것이 먼저이고 뒤에 문자열이 나오는 것이 마지막에 오도록 결과를 정렬하는 방법이 있나요?

예: 'hab'을 검색하면 현재 반환됩니다.

  1. 반음계
  2. habit
  3. ehab을 실행하다

이런 식으로 했으면 좋겠어

  1. hab it ('hab'이 시작이므로 최초)
  2. alp hab et ('hab'이 단어 중간에 있기 때문에 두 번째)
  3. re hab('hab'이 단어의 끝에 있기 때문에 마지막)

또는 적어도 이 방법:

  1. hab it ('hab'이 시작이므로 최초)
  2. re hab('hab'이 세 번째 문자로 시작되므로 두 번째)
  3. alp hab et ('hab'이 네 번째 문자로 가장 늦게 시작되므로 마지막)

누가 좀 도와주면 좋을 텐데!

첫 번째 방법(단어 시작, 단어 중간, 단어 끝)을 사용하려면 다음과 같이 하십시오.

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY
  CASE
    WHEN word LIKE 'searchstring%' THEN 1
    WHEN word LIKE '%searchstring' THEN 3
    ELSE 2
  END

두 번째 방법(일치된 문자열 위치)을 사용하려면 다음 함수를 사용합니다.

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', word)

예를 들어, 두 개 이상의 단어가 다음 문자로 시작하는 경우를 대비해서 타이브레이크를 사용할 수도 있습니다.hab그러기 위해서는 다음을 권장합니다.

SELECT word
FROM words
WHERE word LIKE '%searchstring%'
ORDER BY <whatever>, word

여러 단어로 시작하는 경우hab, 로 시작하는 단어hab그룹화되어 알파벳 순으로 정렬됩니다.

다음과 같이 시도해 보십시오.

SELECT word 
FROM words 
WHERE word LIKE '%searchstring%' 
ORDER BY CASE WHEN word = 'searchstring' THEN 0  
              WHEN word LIKE 'searchstring%' THEN 1  
              WHEN word LIKE '%searchstring%' THEN 2  
              WHEN word LIKE '%searchstring' THEN 3  
              ELSE 4
         END, word ASC

를 사용할 수 있습니다.INSTR단어 내 검색 문자열의 시작 위치를 반환하는 함수입니다.

 ORDER BY INSTR(word,searchstring)

검색 문자열이 두 개의 다른 단어로 동일한 위치에 표시될 때 결과 세트를 보다 확실하게 하려면 ORDER BY에 두 번째 식을 추가합니다.

 ORDER BY INSTR(word,searchstring), word

(예를 들어 searchstring)hab양쪽의 두 번째 위치에 나타나다chablis그리고.shabby)

고객님의 경우 다음과 같습니다.

ORDER BY INSTR(word, '%searchstring%')

INSTR에서 검색하다word의 칼럼을 쓰다.'%searchstring%'다시 제자리로 돌아가면 매치가 안 되면0결과가 순서대로 내려가는 원인이 됩니다.

방향을 변경하기 위해 다음과 같이 DESC를 추가할 수도 있습니다.

ORDER BY INSTR(word, '%searchstring%') DESC

언급URL : https://stackoverflow.com/questions/18725941/mysql-order-by-best-match

반응형