我有一个SQL 2008 Express数据库,它有以下表格:
CREATE TABLE Videos
(VideoID bigint not null,
Title varchar(100) NULL,
Description varchar(MAX) NULL,
isActive bit NULL )
CREATE TABLE Tags
(TagID bigint not null,
Tag varchar(100) NULL )
CREATE TABLE VideoTags
(VideoID bigint not null,
TagID bigint not null )
现在我需要SQL查询来搜索针对这些表的单词(即Beyonce Halo Music Video)。
哪些视频有:
我将根据观点展示这些视频。这将是什么SQL查询? LINQ查询会更好。
如果您知道更好的方法,请提供帮助。
答案 0 :(得分:1)
据我所知,SQL Server的全文功能不适用于多语言列和表。
我也在处理项目的类似情况;我还没有找到任何解决方案。
我也使用类似于Mladen的方法。我的速度有点慢,但我总结了这些分数;而不是switch-case方法:
select (case when Title = 'yourPhrase' then 0.5 else 0 end) +
(case when Title like '%yourPhrase%' then 0.1 else 0 end) +
(case when Title like '%your% %Phrase%' then 0.2 else 0 end) as Weight
from yourTable
where <your other filters but not a 'like' operator>
order by Weight desc
在where子句中使用like运算符非常昂贵。因此,在我看来,选择所有并稍后订购可能会更好。
答案 1 :(得分:0)
你应该全文搜索。
除此之外,您可以对每个表进行搜索查询,然后使用案例进行权重。但这种方法非常笨重而且不太好。
select case when Title = 'yourPhrase' then 0.5 when Title like '%yourPhrase%' then 0.1 when Title like '%your% %Phrase%' then 0.2 end as Weight
from yourTable
where Title like %yourPhrase%