我工作的一个Web项目,显示了它的一个网页文章的细节和侧面我还需要证明基于前5名相关文章keywords
或tags
。
我我怎么可以完全不使用T-SQL,而不是从代码做处理的一部分,它背后我不知道。
我使用功能分裂我的关键字,并通过结果等查询来获取这不是为我工作所需的结果。
CREATE TABLE Article
(
ArticleID int,
Title varchar(200),
Description varchar(500),
Details nvarchar(MAX),
keywords varchar(100)
)
INSERT INTO Article VALUES(1, 'Article One','Article desc', 'article details', 'one,two,three')
INSERT INTO Article VALUES(2, 'Article Two','Article desc', 'article details', 'two,three,four')
INSERT INTO Article VALUES(3, 'Article three','Article desc', 'article details', 'three,four,five')
INSERT INTO Article VALUES(4, 'Article four','Article desc', 'article details', ',four,five,six')
INSERT INTO Article VALUES(5, 'Article five','Article desc', 'article details', 'two,three')
INSERT INTO Article VALUES(6, 'Article six','Article desc', 'article details', 'eight, nine')
INSERT INTO Article VALUES(7, 'Article six','Article desc', 'article details', 'ten, nine')
INSERT INTO Article VALUES(8, 'Article six','Article desc', 'article details', 'eleven, eight')
功能
CREATE FUNCTION [dbo].[uf_SplitKeywords]
( @DELIMITER VARCHAR(5),
@LIST VARCHAR(MAX)
)
RETURNS @TABLEOFVALUES TABLE
( ROWID SMALLINT IDENTITY(1,1),
[VALUE] VARCHAR(MAX)
)
AS
BEGIN
DECLARE @LENSTRING INT
WHILE LEN( @LIST ) > 0
BEGIN
SELECT @LENSTRING =
(CASE CHARINDEX( @DELIMITER, @LIST )
WHEN 0 THEN LEN( @LIST )
ELSE ( CHARINDEX( @DELIMITER, @LIST ) -1 )
END
)
INSERT INTO @TABLEOFVALUES
SELECT SUBSTRING( @LIST, 1, @LENSTRING )
SELECT @LIST =
(CASE ( LEN( @LIST ) - @LENSTRING )
WHEN 0 THEN ''
ELSE RIGHT( @LIST, LEN( @LIST ) - @LENSTRING - 1 )
END
)
END
RETURN
END
我需要的?
显示ID为3条
SELECT ArticleID, Title, Keywords FROM Article WHERE ArticleID = 3
然后,我需要展示基于关键字的相关文章three,four,five
从选择的物品,在这种情况下应该是文章与articleid=3
在这种情况下,结果应该显示我的id 1,2,3,4,5为关键字的文章配合仅这些行。
我想这是不工作与下面的查询来实现这一目标
SELECT TOP 5 ArticleID, Title, Keywords FROM Articles WHERE Keywords IN
(SELECT '''%'+ VALUE+ '%''' AS VALUE FROM [uf_SplitKeywords] (',', 'one,two,three'))
我希望在这方面的帮助。
对样品sqlFiddle由于某种原因,我不能够创造出我所提到的sqlFiddle功能。