2012-01-10 4 views
1

나는 다음과 같은까지 구축 된 SQL 검색 기능이의 외관에 의해 주문하기 : 결과를 의미SQL 검색 기능은 열

SELECT 
    * 
FROM 
    Table 
WHERE 
    Question LIKE @SearchString 
    OR Answer LIKE @SearchString 
    OR Keywords LIKE @SearchString 

을 내가 관련성을 주문하려는 키워드 LIKE @SearchString 위에, Answer LIKE @SearchString을 입력 한 다음 질문 @ LIKE @SearchString을 입력하십시오. 그러나 나는 몇 가지 인터넷 검색 노력에도 불구하고 어떻게 파악할 수 없습니다.

는 어디 선가

ORDER BY 
    CASE 
     WHEN CHARINDEX(FAQ_FAQ.Keywords, @SearchString, 1) > 0 THEN 0 
    ELSE 1 
END ASC, 

가 작동 할 수 있음을 발견,하지만 분명히 그렇지 않습니다.

select * 
from 
(
    SELECT 
     *, 1 as OrderRank 
    FROM 
     Table 
    WHERE 
     Question LIKE @SearchString 

    union all 

    SELECT 
     *, 2 as OrderRank 
    FROM 
     Table 
    WHERE 
     Answer LIKE @SearchString 

    union all 

    SELECT 
     *, 3 as OrderRank 
    FROM 
     Table 
    WHERE 
     Keywords LIKE @SearchString 
)a 
order by OrderRank 

답변

3
SELECT 
    * 
FROM 
    Table 
WHERE 
    Keywords LIKE @SearchString 
    OR Answer LIKE @SearchString 
    OR Question LIKE @SearchString 
ORDER BY 
    CASE WHEN Keywords LIKE @SearchString THEN 0 
     WHEN Answer LIKE @SearchString THEN 1 
     ELSE 2 
    END 
+0

최고의 실행 계획을 위해 +1 : – Jordan

+0

이 트릭을! 고마워! 비슷한 것을 시도했지만, "LIKE"는 나에게 웬일인지 에러를 주었다. –

1

당신은 항상 UNION ALL 경로를 사용할 수 함께 조합하면 원하는 결과를 얻을 수 있습니다. 더 좋은 방법이 있을지 모르지만 나는 그것을 알지 못합니다. 당신은 노동 조합에 익숙합니까?

+0

노조 트릭이 작동하려면 1,2,3과 같은 의사 - 열을 추가하고 전체를 다른 선택으로 감싸서 새 번호로 주문할 수 있도록해야합니다. – Randy

+0

@Randy 정확히 내가 한 일이다. –

+0

두 번째 쿼리는 두 개 또는 세 개의 조건과 일치 할 때 표시 될 테이블의 행을 복제 (또는 삼중)하는 데 신경 쓰지 않으면 꽤 좋습니다 . –

0

당신은 세 가지를 분명하게 선택할 수 있습니다

SELECT 
    * 
FROM 
    Table 
WHERE 
    Question LIKE @SearchString 

union all 

SELECT 
    * 
FROM 
    Table 
WHERE 
    Answer LIKE @SearchString 

union all 

SELECT 
    * 
FROM 
    Table 
WHERE 
    Keywords LIKE @SearchString 

당신도이만큼 멀리 걸릴 수 있습니다 : 사전에

들으

0

어쩌면 이렇게 될까요?

select * from (
    select 
     t.*, 
     case when Question LIKE @SearchString then 1 
      when Answer LIKE @SearchString then 2 
      when Keywords LIKE @SearchString then 3 
     end crit 
    from table t 
) where crit > 0 
order by crit