我正在开发一个网络项目,该项目在其中一个页面上显示文章详细信息,另一方面,我还需要显示基于keywords
或的前 5 篇相关文章tags
。
我不确定如何使用 T-SQL 完全做到这一点,而不是从后面的代码中进行部分处理。
我使用 FUNCTION 拆分我的关键字并将结果传递给其他查询以获得对我不起作用的所需结果。
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 上提到的 FUNCTION。