2011-06-11 3 views
6

다음과 유사한 쿼리를 통해 전체 텍스트 검색과 일치하는 기사를 반환합니다. 프로덕션에서는 [FULL TEXT SEARCH CRITERIA] 텍스트가 실제 전체 텍스트 검색 식으로 바뀝니다.리조트가없는 전체 텍스트 검색 결과 페이지로 돌아 가기?

결과가 한 페이지 만 반환되도록 쿼리가 작성됩니다.

WITH ArtTemp AS (
    SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY ArtViews DESC) AS RowID, 
    Article.ArtID,Article.ArtTitle,Article.ArtSlug,Category.CatID,Category.CatTitle, 
    Article.ArtDescription,Article.ArtCreated,Article.ArtUpdated,Article.ArtUserID, 
    [User].UsrDisplayName AS UserName FROM Article 
    INNER JOIN Subcategory ON Article.ArtSubcategoryID = Subcategory.SubID 
    INNER JOIN Category ON Subcategory.SubCatID = Category.CatID 
    INNER JOIN [User] ON Article.ArtUserID = [User].UsrID 
    WHERE [FULL TEXT SEARCH CRITERIA] AND Article.ArtApproved = 1 
) 

SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated, 
ArtUserID,UserName FROM ArtTemp 
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows) 
ORDER BY RowID 

그 전체 텍스트 검색 관련성의 순서로 결과를 반환 제외하고이 잘 작동하지만 ROW_NUMBER() OVER (ORDER BY ArtViews DESC) 리조트 결과. 결과를 사용하지 않고 동일한 쿼리를 작성할 수있는 방법이 있습니까?

답변

1

올바른 대답은 CONTAINSTABLE인데, 이는 CONTAINS과 유사하게 작동하지만 부울 WHERE 조건 대신 표를 반환합니다.

그래서 결국 대신 이런 식으로 끝납니다.

WITH ArtTemp AS (
    SELECT TOP (@StartRow + @MaxRows) ROW_NUMBER() OVER (ORDER BY FTS.RANK DESC) AS RowID, 
    Article.ArtID,Article.ArtTitle,Article.ArtSlug,Category.CatID,Category.CatTitle, 
    Article.ArtDescription,Article.ArtCreated,Article.ArtUpdated,Article.ArtUserID, 
    [User].UsrDisplayName AS UserName FROM Article 
    INNER JOIN Subcategory ON Article.ArtSubcategoryID = Subcategory.SubID 
    INNER JOIN Category ON Subcategory.SubCatID = Category.CatID 
    INNER JOIN [User] ON Article.ArtUserID = [User].UsrID 
    INNER JOIN CONTAINSTABLE(Article, *, 'FORMSOF(INFLECTIONAL, abc)') AS FTS ON Article.ArtID = FTS.[KEY] 
    WHERE Article.ArtApproved = 1 
) 

SELECT ArtID,ArtTitle,ArtSlug,CatID,CatTitle,ArtDescription,ArtCreated,ArtUpdated, 
ArtUserID,UserName FROM ArtTemp 
WHERE RowID BETWEEN @StartRow + 1 AND (@StartRow + @MaxRows) 
ORDER BY RowID 
관련 문제