仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 886|回复: 8
打印 上一主题 下一主题

[学习教程] 在sql中为文章主动加上锚文本链接

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:07:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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[dbo].[iti_Ar]on[dbo].[t_Ar]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。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-18 12:04:11 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
admin 该用户已被删除
板凳
发表于 2015-1-26 12:50:43 | 只看该作者
另一个是把SQL语句写到服务器端,就是所谓的SP(存储过程);
透明 该用户已被删除
地板
发表于 2015-2-4 18:35:17 | 只看该作者
也可谈一下你是怎么优化存储过程的?
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-10 05:31:41 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
飘灵儿 该用户已被删除
6#
发表于 2015-2-28 22:32:18 | 只看该作者
比如日志传送、比如集群。。。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-10 09:43:52 | 只看该作者
发几份SQL课件,以飨阅者
变相怪杰 该用户已被删除
8#
发表于 2015-3-17 06:35:18 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-24 00:23:54 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-27 20:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表