복붙노트

[SQL] "최고의 경기"에 의해 MySQL의 순서

SQL

"최고의 경기"에 의해 MySQL의 순서

나는 라이브 검색을 사용하여 해당 테이블을 검색 할 단어를 포함하는 테이블 및 입력 필드가 있습니다. 현재, 나는 테이블을 검색하려면 다음 쿼리를 사용 :

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

문자열이 단어의 시작 부분에서 발견되는 사람이 먼저 와서 문자열이 나중에 단어에 표시되는 위치를 사람들이 마지막으로 올되도록 결과를 정렬 할 수있는 방법이 있습니까?

예 : 현재 반환 'HAB'검색

하지만 난 그것을처럼 이런 식으로 거라고 :

또는 적어도이 방법에서 :

사람이 좀 도와 수 있다면 좋은 것입니다!

해결법

  1. ==============================

    1.(단어, 끝 단어의 중간에, 시작 워드) 그에게 첫 번째 방법을 수행하려면이 같은 시도 :

    (단어, 끝 단어의 중간에, 시작 워드) 그에게 첫 번째 방법을 수행하려면이 같은 시도 :

    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으로 시작하여 복수의 단어 인 경우, 단어 시작.

  2. ==============================

    2.이 방법을 시도해보십시오

    이 방법을 시도해보십시오

    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
    
  3. ==============================

    3.당신은 단어 내에서 검색 문자열의 시작 위치를 반환하는 INSTR 기능을 사용할 수 있습니다,

    당신은 단어 내에서 검색 문자열의 시작 위치를 반환하는 INSTR 기능을 사용할 수 있습니다,

     ORDER BY INSTR(word,searchstring)
    

    검색 문장은 두 개의 다른 단어에서 같은 위치에 나타날 때 결과 집합이 더 결정적하려면 순서에 의해 두 번째 식을 추가 :

     ORDER BY INSTR(word,searchstring), word
    

    (예를 들어, HAB를 검색 문장은 샤블리 초라한 모두 제 2 위치에 표시)

  4. from https://stackoverflow.com/questions/18725941/mysql-order-by-best-match by cc-by-sa and MIT license