【发布时间】:2018-03-08 06:15:39
【问题描述】:
我有一个与新闻相关的表格,其中包含多个字段,例如Title, Category, Tag, Country, details ...
我需要根据用户现在正在阅读的新闻显示related news。
相关新闻可以基于Tag, Category & Country
我面临的问题是Tags 我需要使用所有新闻项目搜索每个标签,例如,如果新闻项目有 3 个标签,那么它必须搜索所有新闻记录三次才能获得基于标签的结果匹配。
我在 Fiddle http://sqlfiddle.com/#!18/d9dd7/1 上设置了示例表结构
示例表
CREATE TABLE [TestTable](
[AutoID] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](100) NULL,
[Category] [nvarchar](50) NULL,
[Tags] [nvarchar](200) NULL,
Country [nvarchar](50)
)
示例
假设我正在阅读This is News One America
然后相关文章应显示This is News five,因为它与类别和两个关键字“唐纳德特朗普,伊朗”匹配,但在这种情况下,国家不同,这有点困难
所以搜索应该优先基于
- 1 类
- 标签
- 国家
我正在使用的 SP
DECLARE @Category NVARCHAR(100);
DECLARE @Country NVARCHAR(100);
DECLARE @Tags NVARCHAR(4000);
SELECT
,@Category = 'Politics'
,@Country = 'US'
,@Tags = 'Donald Trump, Iran'
FROM TestTable WHERE AutoID=1
DECLARE @tempTable TABLE
(
TempNewsId INT IDENTITY(1,1),
ID INT,
Title NVARCHAR(MAX),
Desc NVARCHAR(MAX),
Tags NVARCHAR(100),
Country NVARCHAR(50),
Category NVARCHAR(100)
)
IF @Category IS NOT NULL
BEGIN
SET @Category ='%'+ @Category+'%'
INSERT INTO @tempTable
SELECT TOP 4
AutoID, Title, Desc,Tags,Country,Category FROM TestTable
WHERE Category IS NOT NULL AND Category LIKE @Category
END
IF @Tags IS NOT NULL
BEGIN
SET @Tags ='%'+ @Tags+'%'
INSERT INTO @tempTable
SELECT TOP 4
AutoID, Title, Desc,Tags,Country,Category FROM TestTable
WHERE Tags IS NOT NULL AND Category LIKE @Tags
END
IF @Country IS NOT NULL
BEGIN
SET @Country ='%'+ @Country+'%'
INSERT INTO @tempTable
SELECT TOP 4
AutoID, Title, Desc,Tags,Country,Category FROM TestTable
WHERE Country IS NOT NULL AND Country LIKE @Country
END
SELECT TOP 20 ID, Title,[Desc],Tags,Country,Category FROM @tempTable
ORDER BY TempNewsId ASC
【问题讨论】:
-
您能否给出一个具有预期输出的示例输入示例。
-
研究使用全文搜索。顺便说一句,您从未向我们展示过您当前的查询,或者您遇到问题的原因。
-
@PawanKumar,我已经用一种可能的情况更新了问题
-
桌子的大概尺寸是多少?
-
@gomory-chvatal,大约 330 行,它以缓慢的页面增长,每月最多 2-4 条新闻
标签: sql sql-server tsql sql-server-2012