asp.net 相關文章實現方法第1/2頁

來源:互聯網
上載者:User

前言:大家或許會覺得很驚訝:為什麼靈感之源會討論SQL?或許應該這樣說吧:搞業務系統,不跟SQL扯上關係似乎比較難。

情境:在開發某系統的過程中,我遇到了要實現“相關文章”功能:任何文章都可以定義“關鍵字”,每篇文章依靠這個“關鍵字”來確定其它文章是否跟它相關,如果沒有定義關鍵字,則可能需要使用全文檢索索引來實現了,這是別的話題了。

思考:因為允許關鍵字可以通過“,”分隔字元號來定義多個,所以加大了難度。經過思考,可以通過在儲存文章的時候便分解關鍵字,建立一關鍵字表,把所有關鍵字逐個按對應的文章ID來儲存。並決定採用純SQL預存程序的辦法,因為這種重複的操作,與其用通用函數,倒不如用先行編譯的預存程序更加快,這樣能把所有處理都留給SQL Server。

解決方案1:首選要做的是在原有文章表(Details)的基礎上建立相關文章表(RelatedDetails),欄位包括ItemID(主鍵)、DetailID(文章ID)和Keyword(關鍵字)。以下是主要預存程序:

1、UpdateRelatedDetails:更新相關文章關鍵字複製代碼 代碼如下:CREATE procedure dbo.UpdateRelatedDetails

@DetailID INT,
@Keywords NVARCHAR(500)

AS

EXEC DeleteRelatedDetails @DetailID

DECLARE @I INT
DECLARE @Keyword NVARCHAR(50)

SET @Keywords=REPLACE(@Keywords,',', ',')
SET @Keywords=REPLACE(@Keywords,';', ',')
SET @Keywords=RTRIM(LTRIM(@Keywords))

SET @I=CHARINDEX(',', @Keywords)

WHILE @I>=1
BEGIN
SET @Keyword=LEFT(@Keywords, @I-1)
INSERT INTO DetailKeywords (DetailID, Keyword) VALUES(@DetailID, @Keyword)
SET @Keywords=SUBSTRING(@Keywords, @I+1,LEN(@Keywords)-@I)
SET @I=CHARINDEX(',', @Keywords)
END

IF @Keywords<>''
INSERT INTO DetailKeywords (DetailID, Keyword) VALUES(@DetailID, @Keywords)
GO

2、DeleteRelatedDetails:刪除原有相關文章關鍵字複製代碼 代碼如下:CREATE PROCEDURE dbo.DeleteRelatedDetails

@DetailID INT

AS

DELETE FROM DetailKeywords WHERE DetailID=@DetailID
GO

3、GetRelatedDetails:擷取相關文章,其中Details就是文章表 複製代碼 代碼如下:CREATE procedure dbo.GetRelatedDetails

@DetailID INT

AS

DECLARE @Keywords NVARCHAR(500)

SELECT @Keywords=Keywords FROM Details WHERE ItemID=@DetailID

IF @Keywords<>''
BEGIN
SELECT DISTINCT d.ItemID, d.Subject, d.ItemFile
FROM Details d RIGHT OUTER JOIN DetailKeywords k ON k.DetailID=d.ItemID WHERE d.ItemID <> @DetailID AND @Keywords LIKE '%'+k.Keyword+'%'
END
GO

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.