前言:大家或许会觉得很惊讶:为什么灵感之源会讨论SQL?或许应该这样说吧:搞业务系统,不跟SQL扯上关系似乎比较难。

场景:在开发某系统的过程中,我遇到了要实现“相关文章”功能:任何文章都可以定义“关键字”,每篇文章依靠这个“关键字”来确定其它文章是否跟它相关,如果没有定义关键字,则可能需要使用全文检索来实现了,这是别的话题了。

思考:因为允许关键字可以通过“,”分隔符号来定义多个,所以加大了难度。经过思考,可以通过在保存文章的时候便分解关键字,建立一关键字表,把所有关键字逐个按对应的文章ID来保存。并决定采用纯SQL存储过程的办法,因为这种重复的操作,与其用通用函数,倒不如用预编译的存储过程更加快,这样能把所有处理都留給SQL Server。

解决方案:首选要做的是在原有文章表(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

代码很简单,但希望能給大家带来一点思考:)

p.s.因为前台是使用.NET写的,那这个帖子也算是部分.NET技术了,呵呵。

转载于:https://www.cnblogs.com/unruledboy/archive/2004/10/21/55190.html

(MS SQL)如何实现相关文章功能(多关键字匹配)相关推荐

  1. php 中 相关文章 的思路,WordPress实现推荐相关文章功能代码

    WordPress实现推荐相关文章功能有2种方法:一种是可以在单篇日志和 feed 中都生成推荐相关文章功能,不过,功能越强大,代码也就会相应较多,所以这里还提供第二种,仅在单篇日志中实现在相关日志的 ...

  2. SQL Server 性能相关文章 BY GEERT VANHOVE

    聚集索引:Clustered Indexes in SQL Server: Things You Need to Know - 08 Dec 2005 数据库压力测试:How to Set Up a ...

  3. Oracle8i与MS SQL SERVER2000之比较

    编者按:这篇文章是我三年前的写的文章 下面是我个人的一点体会,由于水平有限,估计有理解的有一些问题,欢迎指正对于Oracle 8i初学者,很有可能会经常把MS SQL Server中的概念拿来与Ora ...

  4. Oracle 9i与MS SQL Server 2000之比较连载五.zz

    http://kb.cnblogs.com/a/1153156 Oracle 9i与MS SQL Server 2000之比较连载五 2008-04-14 18:13 四.Oracle中新的数据库对象 ...

  5. SysInfoTools MS SQL Transaction Log Recovery 22.0

    SysInfo DBF 修复工具专门用于修复由 dBase II IV.V Visual FoxPro.Clipper.dBXL.dBFast.CodeBase.MultiBase.Arago 生成的 ...

  6. MS SQL Server数据库修复利器—D-Recovery For MS SQL Server数据恢复软件

    微软的SQL Server 数据库最常用的有两种类型的文件: 1.主要数据文件,文件后缀一般是.MDF: 2.事务日志文件,文件后缀一般是.LDF. 用户数据表.视图.存储过程等等数据,都是存放在MD ...

  7. Blog外挂之:妙用del.icio.us实现“站内相关文章”

    Blog外挂之:妙用del.icio.us实现"站内相关文章" By 刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba) 先说明一下, ...

  8. 织梦自定义html文本,织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章...

    这篇文章主要为大家详细介绍了织梦自定义标签dede:sql根据自定义字段填的文章id获取相关文章,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 有的时候我们需要 ...

  9. 微信灰度测试“相关阅读”功能 公众号文章下推荐延伸内容

    近日,有部分微信用户反映,在公众号文章的底部看到了"相关阅读"模块,该模块会推荐与正在阅读的文章相关的其他内容.腾讯方面向媒体确认,正在灰度测试"相关阅读"功能 ...

最新文章

  1. 【廖雪峰python入门笔记】dict
  2. 【转】C# using的三种使用方法
  3. [剑指offer][JAVA]面试题第[33]题[二叉搜索树的后序遍历][单调栈][递归分治]
  4. mysql8.0.22安装步骤图解_MySQL server 5.5的安装 步骤图解
  5. linux系统用户登陆时脚本执行顺序
  6. inurl news.php id,news.php
  7. webrtc 判断是否支持_5G时代-WebRTC音视频高级开发
  8. 【物联网智能网关-08】TinyGUI和WPF汉字显示技术比较
  9. vSphere Replication:虚拟机的保护伞
  10. mysql 数据增量备份_mysqlmysqldump数据备份和增量备份
  11. Hedgehog 信号通路与癌症
  12. 解决Maven报错:Could not transfer artifact xxx
  13. 在线教育需要准备好哪些直播设备?
  14. 基于SSM实现医院预约挂号系统
  15. 公司股权分配的七大简明实操建议
  16. C++打开网页,发起QQ对话,调用外部exe程序
  17. 苹果CMS海螺模板V16魔改版2.0修复bug分享给大家
  18. C/c++中内存拷贝函数memcpy详解
  19. minMaxLoc opencv
  20. 声声入耳:音频新体验

热门文章

  1. “A and B ...”,谓语动词必以复数形式呈现?
  2. Selenium--调用js,对话框处理 (python)
  3. P1991 无线通讯网
  4. Xshell连接不上Linux的解决方法
  5. python文件压缩
  6. 会话管理-2.1.Session介绍
  7. SQL Server text field里面有换行符的时候copy到excel数据会散乱
  8. [恢]hdu 200题留念
  9. Windows使用VNC连接ubuntu
  10. OVS packet处理流程(三十二)