私は、そのページの 1 つに記事の詳細を表示する Web プロジェクトに取り組んでおり、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 を作成できません。