在sql中为文章主动加上锚文本链接
MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。锚文本能够在用户扫瞄我们的文章时引诱用户找到想要的文章,在网站排名上也是一个相称主要的要素,以是为我们的文章加上得当的锚文本是相称不错的选择。但像自己如许的专业站长,想手工来保护锚文本,事情量长短常年夜的,以是本人写了一个sql函数,在新增文章时,主动为文章增加上锚链接。
上面讲讲自己的思绪:
起首是要创立一个表,这个表中存储了每篇文章的关头字,以断定甚么样的笔墨能够链接到该文章。表布局以下:
createtabletags
(
IDintnotnullprimarykeyidentity(1,1),
ArIDintnotnull--文章的ID
ArTypetinyintnotnull--文章的分类
Tagvarchar(50)notnull--关头字
IsPrimarybitnotnull--是不是为主关头字
)
固然了,下面的表布局是依据自己的网站的创立的,列位能够创立合适本人网站的关头字表,为了把持锚文本的公道性,该表还必要增加一些束缚,好比ArID与Tag应当独一,ArID与IsPrimary也应当独一等。
然后创立一个函数,用来主动将文章内容中的关头字加上链接,上面的函数用到了游标,大概效力不是很好,还请妙手们指导更好的办法。(为了测试本站该功效,本处加上表值函数的关头字,看能不克不及主动加上链接:),看人人体谅!)
该函数的sql以下:
createfunctionudf_create_tag_hy
(@strvarchar(max))
returnsvarchar(max)
as
begin
declare@k_tagvarchar(50)
declare@artypetinyint
declare@aridint
declare@pathvarchar(50)
declare@t_temp_key_tagtable
(
temp_keytagvarchar(50),
temp_aridint
)
declarere_sultcursorforselecttag,artype,aridfromkeys_tagorderbyIsPrimarydesc,
idasc
--该处的orderbyIsPrimarydesc,idasc排序的缘故原由申明一下,我们应当只管为主关头字加上链接,其次才长短主关头字
openre_sult
fetchnextfromre_sultinto@k_tag,@artype,@arid
while@@fetch_status=0
begin
if(selectcount(1)from@t_temp_key_tag)<3
andcharindex(@k_tag,@str)0
andnotexists(select1from@t_temp_key_tagwheretemp_keytag=@k_tagortemp_arid=@arid)
/*
该处的判别前提申明:
1,(selectcount(1)from@t_temp_key_tag)<3控件一篇文章的锚文本不凌驾三个
2,charindex(@k_tag,@str)0判别关头字是在文章的主内容中存在
3,notexists(select1from@t_temp_key_tagwheretemp_keytag=@k_tagortemp_arid=@arid)
假如这篇文章一个关头字呈现了屡次,只为第一次呈现的加上链接。
假如一篇文章的多个关头字都在该篇文章中呈现,也只为一个关头字加上链接
为何要有下面三个把持了?呵呵,都分明,就不细说了。
*/
begin
if(@artype=0)
begin
set@path=http://www.lmwlove.com/ac/ID717
end
elseif(@artype=1)
begin
set@path=http://www.lmwlove.com/ae/ID32
end
elseif(@artype=2)
begin
set@path=http://www.lmwlove.com/ah/ID31
end
set@str=replace(@str,@k_tag,<ahref="+@path+cast(@aridasvarchar(50))+"target="_blank"class="content_href">+@k_tag+</a>)
insertinto@t_temp_key_tag(temp_keytag,temp_arid)values(@k_tag,@arid)
end
fetchnextfromre_sultinto@k_tag,@artype,@arid
end
closere_sult
deallocatere_sult
return@str
end
该函数的一些逻辑是基于本站数据库布局上的,好比对@artype参数的判别。
函数创立乐成后,还必要在必要主动创立锚文本的表中加上insteadof触发器,主动挪用该函数,举比方下;
createtrigger.on.insteadofinsert
as
if@@rowcount=0return
setnocounton
insertintoSubject_Article
(
Title,Content,CreateDate
)
selectTitle,dbo.udf_create_tag_hy(Content),CreateDatefrominserted
setnocountoff
到此,在我们往表t_Ar增加文章时,触发器iti_Ar就会主动为我们创立锚文本了,人人尝尝吧。MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。 从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。 另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程); 也可谈一下你是怎么优化存储过程的? Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。 比如日志传送、比如集群。。。 发几份SQL课件,以飨阅者 所以你总能得到相应的升级版本,来满足你的需求。 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
页:
[1]