1

フレーズごとに検索結果を取得し(複数の列を検索)、並べ替えの優先度は、一致する列(完全一致の場合を含む)に依存する必要があります。

私の例はうまく機能しますが、それでももっと良い方法があると思います。

WITH    products
  AS ( SELECT
        -- .. some columns
        --------- For Sorting -------------
        [sortOrder] = CASE 
            WHEN [partNumber] = @searchPhrase                                                                       
             OR [manPartNumber]= @searchPhrase
            THEN 1                                                                
            WHEN  FormatSiteNameForSearch( [siteName] ) 
                  LIKE '%' + @searchPhrase + '%'
            THEN 2                                                                        
            WHEN [partNumber] LIKE '%' + @searchPhrase + '%'
                 OR [manPartNumber] LIKE '%' + @searchPhrase + '%'
            THEN 3
            ELSE 100
            END
        --------- End For Sorting -------------
        FROM [dbo].[PRODUCTS_Products]           
        WHERE                                                                                                                            
            [partNumber] LIKE '%' + @searchPhrase + '%'
            OR [manPartNumber] LIKE '%'+ @searchPhrase + '%'
            OR FormatSiteNameForSearch([siteName]) LIKE '%'+@searchPhrase+'%'                                                              
            OR [name] LIKE '%'+ @searchPhrase+ '%'                                                                                                                      
    )
    SELECT TOP(10) *
    FROM    products
    ORDER BY sortOrder

ありがとうございました。

4

1 に答える 1

2
SELECT TOP (10) * 
FROM   [dbo].[PRODUCTS_PRODUCTS] 
WHERE  [PARTNUMBER] LIKE '%' + @searchPhrase + '%' 
        OR [MANPARTNUMBER] LIKE '%' + @searchPhrase + '%' 
        OR Formatsitenameforsearch([SITENAME]) LIKE '%' + @searchPhrase + '%' 
ORDER  BY CASE 
            WHEN [PARTNUMBER] = @searchPhrase 
                  OR [MANPARTNUMBER] = @searchPhrase THEN 1 
            WHEN Formatsitenameforsearch([SITENAME]) LIKE 
                 '%' + @searchPhrase + '%' THEN 2 
            WHEN [PARTNUMBER] LIKE '%' + @searchPhrase + '%' 
                  OR [MANPARTNUMBER] LIKE '%' + @searchPhrase + '%' THEN 3 
            ELSE 100 
          END 
于 2012-10-10T11:22:22.370 に答える