您的位置:首页 > 运维架构 > 网站架构

为你的网站增加"标签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,区别主题类型。

接着就是设置一个主题的标签存储过程,我已经封装成一个存储过程了。直接调用即可。

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今天增加标签功能的一个代码示例,这个方法不一定是最好的,希望各位有更好的可以在后面的评论中发上来。谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐