2011-06-11 13 views
6

Tam metin aramasıyla eşleşen makaleleri döndürmek için aşağıdakine benzer bir sorgum var. Üretimde, [FULL TEXT SEARCH CRITERIA] metni, gerçek tam metin arama ifadesi ile değiştirilir.Resorting olmadan Tam Metin Arama Sonuçlarının İade Sayfası?

Sorgu, yalnızca bir sonuç sayfası döndürmek üzere yazılmıştır.

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 

o tam metin arama ilgi sırasına sonuçları döndürür dışında bu iyi çalışır, ancak ROW_NUMBER() OVER (ORDER BY ArtViews DESC) tatil sonuçlanır. Sonuçları sorgulamadan aynı sorguyu yazmanın herhangi bir yolu var mı?

cevap

1

Bunun için doğru yanıt CONTAINSTABLE, CONTAINS benzeri çalışır, ancak bir Boolean WHERE durumu yerine bir tablo döndürür.

Bunun yerine bunun gibi bir şeyle bitiriyorum.

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 
İlgili konular