Функция поиска SQL для сортировки по столбцам - PullRequest
1 голос
/ 11 января 2012

У меня есть функция поиска SQL, построенная следующим образом:

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

И я хочу упорядочить их по релевантности, что означает результаты, где ключевые слова LIKE @SearchString сверху, а затем ответ LIKE @SearchStringтогда вопрос нравится @SearchString.Но я не могу понять, как, несмотря на несколько попыток поиска в Google.

Я нашел где-то, что

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

Может работать, но, очевидно, это не так.

Спасибо заранее

Ответы [ 4 ]

3 голосов
/ 11 января 2012
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
1 голос
/ 11 января 2012

Вы всегда можете использовать маршрут UNION ALL:

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 

Вы даже можете пройти до этого:

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
0 голосов
/ 11 января 2012

Что-то вроде этого может быть?

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
0 голосов
/ 11 января 2012

Вы можете выбрать три вещи по отдельности и объединить их вместе, чтобы получить результаты, которые вы ищете. Возможно, есть лучший способ, но я не знаю об этом. Вы знакомы с тем, как объединяться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...