2012-01-10 89 views
1

我已经建立了如下的SQL查询功能命令:SQL搜索功能,通过外观列

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

而且我想通过相关命令他们,这意味着结果,其中的关键字,如@SearchString之上,接着是LIKE @SearchString,然后是LIKE @SearchString。但我似乎无法弄清楚,尽管有几个谷歌搜索的努力。

我发现的地方,

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

可能会奏效,但显然事实并非如此。

提前THX

回答

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最佳执行计划:p – Jordan 2012-01-10 21:44:41

+0

这个伎俩!谢谢!之前尝试过类似的东西,但是“LIKE”出于某种原因给了我错误 – 2012-01-10 21:44:43

1

你总是可以使用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

的工会招工作,你应该添加一些伪列状1,2,3,然后包裹整个事情变成另一种选择,所以你可以通过新号码订购。 – Randy 2012-01-10 21:28:12

+0

@Randy正是我所做的:) – 2012-01-10 21:28:57

+0

如果您不介意(或者想要!)重复(或重复)表格的行时,第二个查询是相当不错的,当这些行匹配2或3的条件时。 – 2012-01-10 21:43:25

0

您可以选择三件事明显并将它们结合在一起,以获得您正在寻找的结果。可能有更好的方法,但我不知道它。你是否熟悉如何结合?

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