2012-04-09 4 views
11

LIKE를 사용하는 경우에만 1 개의 필드를 검색하는 SQLite 쿼리가 필요합니다.SQLite LIKE & ORDER BY 일치 쿼리

기본 예 : 필드 (예 : "존")

  • 만약 같다면

    1. :

      SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10; 
      

      문제는 그 결과가 이런 식으로 주문해야 할 것입니다 필드는 "John"으로 시작합니다 (예 : "John Doe")

    2. 필드에 "John"이 포함 된 경우 (예 : "Jane John Doe")
    ,

    다음 쿼리는 예상 결과를 얻을 수 있지만, 느린 :

    SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John" 
    THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10; 
    

    쿼리는 위의 3 개 별도의 쿼리 (정확히 일치 하나, 하나를 사용하는 대안보다 (또는 내가 잘못 테스트) 느린 with로 시작하고 contains에 하나).

    다른 대안이 있습니까? 이 방법으로

  • 답변

    14

    시도 :

    SELECT name 
    FROM table 
    WHERE name LIKE "%John%" 
    ORDER BY (CASE WHEN name = "John" THEN 1 WHEN name LIKE "John%" THEN 2 ELSE 3 END),name LIMIT 10 ; 
    
    6

    그것은 당신의 동등성 시험에 주문 충분합니다 : 왼쪽에서 오른쪽으로

    ORDER BY name = "John" DESC, name LIKE "John%" DESC 
    

    ORDER BY 절은 평가됩니다.