最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

asp.net 相关文章实现方法第1/2页

来源:动视网 责编:小采 时间:2020-11-27 22:44:22
文档

asp.net 相关文章实现方法第1/2页

asp.net 相关文章实现方法第1/2页:前言:大家或许会觉得很惊讶:为什么灵感之源会讨论SQL?或许应该这样说吧:搞业务系统,不跟SQL扯上关系似乎比较难。 场景:在开发某系统的过程中,我遇到了要实现相关文章功能:任何文章都可以定义关键字,每篇文章依靠这个关键字来确定其它文
推荐度:
导读asp.net 相关文章实现方法第1/2页:前言:大家或许会觉得很惊讶:为什么灵感之源会讨论SQL?或许应该这样说吧:搞业务系统,不跟SQL扯上关系似乎比较难。 场景:在开发某系统的过程中,我遇到了要实现相关文章功能:任何文章都可以定义关键字,每篇文章依靠这个关键字来确定其它文


前言:大家或许会觉得很惊讶:为什么灵感之源会讨论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

12下一页阅读全文

文档

asp.net 相关文章实现方法第1/2页

asp.net 相关文章实现方法第1/2页:前言:大家或许会觉得很惊讶:为什么灵感之源会讨论SQL?或许应该这样说吧:搞业务系统,不跟SQL扯上关系似乎比较难。 场景:在开发某系统的过程中,我遇到了要实现相关文章功能:任何文章都可以定义关键字,每篇文章依靠这个关键字来确定其它文
推荐度:
标签: 方法 实现 net
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top