蝙蝠岛资源网 Design By www.hbtsch.com
前言:大家或许会觉得很惊讶:为什么灵感之源会讨论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下一页阅读全文
场景:在开发某系统的过程中,我遇到了要实现“相关文章”功能:任何文章都可以定义“关键字”,每篇文章依靠这个“关键字”来确定其它文章是否跟它相关,如果没有定义关键字,则可能需要使用全文检索来实现了,这是别的话题了。
思考:因为允许关键字可以通过“,”分隔符号来定义多个,所以加大了难度。经过思考,可以通过在保存文章的时候便分解关键字,建立一关键字表,把所有关键字逐个按对应的文章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,相关文章
蝙蝠岛资源网 Design By www.hbtsch.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
蝙蝠岛资源网 Design By www.hbtsch.com
暂无asp.net 相关文章实现方法第1/2页的评论...
更新日志
2025年05月23日
2025年05月23日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]