为你的网站增加"标签tag“功能
2008-05-04 19:54
337 查看
标签是web2.0时代流行起来的东西,本文讲述用asp.net+sqlserver实现标签功能。
通常可以简单的给一个表增加一个标签字段,然后录入文章的时候,直接输入标签就可以了。但是这么做程序运行效率低。而且搜索次数多的时候,在数据库里like一个字段性能影响是很大的。下面主要讲解用数字代替标签。或者理解成给每个标签一个编号,然后用编号来代替标签。这样搜索标签的功能就转化为判断数字是否相等的功能,这样效率就高很多了。
比如给文章增加标签功能。可以这样设计news表:title,content,addtime,接下来就是增加一个标签字段tag,这个字段是冗余字段,只是显示用的。
另外建立两张表:
标签表tags:id自增字段,tag nvarchar(50)记录标签详细内容,counts记录标签使用次数。
标签映射表tagsmap:newsid,tagid,如果你有多个主题共用一个标签表,比如下载、图片、视频,那么可以增加一个typeid,区别主题类型。
接着就是设置一个主题的标签存储过程,我已经封装成一个存储过程了。直接调用即可。
其中delete t_TagsMap where typeid=@typeid and subjectid=@subjectid这句还可以优化,如果确定以前没有操作过,比如用户增加新的资讯的时候,以前肯定没有该资讯的标签映射关系。那时就不需要执行这条语句。
如果网站访问量很大,那么select @counts=count(*) from t_TagsMap where tagid=@tagid这句也需要优化,不能每次都去统计一下标签使用次数。可以改成定时统计(利用SQL的作业)或者随机统计调用该统计即可满足要求不是特别精确、实时的需求。
以上是本站www.svnhost.cn今天增加标签功能的一个代码示例,这个方法不一定是最好的,希望各位有更好的可以在后面的评论中发上来。谢谢!
通常可以简单的给一个表增加一个标签字段,然后录入文章的时候,直接输入标签就可以了。但是这么做程序运行效率低。而且搜索次数多的时候,在数据库里like一个字段性能影响是很大的。下面主要讲解用数字代替标签。或者理解成给每个标签一个编号,然后用编号来代替标签。这样搜索标签的功能就转化为判断数字是否相等的功能,这样效率就高很多了。
比如给文章增加标签功能。可以这样设计news表:title,content,addtime,接下来就是增加一个标签字段tag,这个字段是冗余字段,只是显示用的。
另外建立两张表:
标签表tags:id自增字段,tag nvarchar(50)记录标签详细内容,counts记录标签使用次数。
标签映射表tagsmap:newsid,tagid,如果你有多个主题共用一个标签表,比如下载、图片、视频,那么可以增加一个typeid,区别主题类型。
接着就是设置一个主题的标签存储过程,我已经封装成一个存储过程了。直接调用即可。
create proc [dbo].[p_Tags] @typeid int, @subjectid int, @tags nvarchar(200) as if @tags <>'' set @tags=@tags+',' else return delete t_TagsMap where typeid=@typeid and subjectid=@subjectid declare @index int, @tagid int, @tag nvarchar(50), @counts int --asp.net,c#,编程,www.svnhost.cn,svn托管 set @index = charindex(',', @tags, 0) while(@index>0) begin set @tag = Left(@tags, @index-1) if exists(select top 1 * from t_Tags where tag=@tag) begin select @tagid=id from t_Tags where tag=@tag select @counts=count(*) from t_TagsMap where tagid=@tagid update t_Tags set counts=@counts+1 where id=@tagid end else begin insert into t_Tags (tag,counts) values(@tag,1) select @tagid = @@identity end insert into t_TagsMap (typeid, subjectid, tagid) values(@typeid, @subjectid, @tagid) set @tags = Right(@tags, len(@tags)-@index) set @index = charindex(',', @tags, 0) end
其中delete t_TagsMap where typeid=@typeid and subjectid=@subjectid这句还可以优化,如果确定以前没有操作过,比如用户增加新的资讯的时候,以前肯定没有该资讯的标签映射关系。那时就不需要执行这条语句。
如果网站访问量很大,那么select @counts=count(*) from t_TagsMap where tagid=@tagid这句也需要优化,不能每次都去统计一下标签使用次数。可以改成定时统计(利用SQL的作业)或者随机统计调用该统计即可满足要求不是特别精确、实时的需求。
以上是本站www.svnhost.cn今天增加标签功能的一个代码示例,这个方法不一定是最好的,希望各位有更好的可以在后面的评论中发上来。谢谢!
相关文章推荐
- 网站出现错误 DedeCMS Error:Tag disabled:"php" more...!
- Office 2003英文版 如何增加"繁体简体转换"的功能?
- 巧妙运用Maxthon浏览器的"高亮关键字"功能 为你的BLOG添光彩
- 在Win7右键菜单中增加"移动到"和"复制到"的功能,提高工作效率
- js正则:匹配一个html的tagname的开始标签,主要是解决包含&lt;&gt;(正则的效率问题建议不使用)
- 用C/C++扩展你的PHP 为你的php增加功能
- 织梦搜索结果增加dede:type、dede:arclist、dede:channelartlist、dede:tag等标签支持
- P2P平台的"我要借款"功能,是否需要上传借款人的相关资料
- 如何根据"需求及功能需要"去选择相关的"材料、型号、技术"的思考
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- JSF错误:cannot find the tag library descriptor for "http://java.sun.com/jsf/core"
- jsp页面出现end tag "&lt;/c:forEach" is unbalanced
- 为WP 1.5增加Tag功能
- 二十五、为你的网站添加强大的搜索功能
- GitHub上增加sshkey出现“key is invalid"
- 9款jQuery插件为你的网站增加亮点
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- No tag "datetimepicker" defined 解决方法
- "允许更新此预编译站点"和网站安全、首次速度的关系 (转自 csdn姚俊华)