仓酷云

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

[学习教程] MYSQL网页设计出色的近乎完善的分页存储历程

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:41 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL。然而,如果你的项目不是在GPL协议下的话,你必须为使用MySQL来支付许可费用,或者你可能因为这个因素而将你的项目改为遵循GPL。存储历程|分页CREATEproceduremain_table_pwqzc
(@pagesizeint,
@pageindexint,
@docountbit,
@this_id)
as
if(@docount=1)
begin
selectcount(id)fromluntanwherethis_id=@this_id
end
else
begin
declare@indextabletable(idintidentity(1,1),nidint)
declare@PageLowerBoundint
declare@PageUpperBoundint
set@PageLowerBound=(@pageindex-1)*@pagesize
set@PageUpperBound=@PageLowerBound+@pagesize
setrowcount@PageUpperBound
insertinto@indextable(nid)selectidfromluntanwherethis_id=@this_idorderbyreply_timedesc
selecta.*fromluntana,@indextabletwherea.id=t.nid
andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
end
GO
存储历程会依据传进的参数@docount来断定是否是要前往一切要分页的纪录总数
出格是这两行
setrowcount@PageUpperBound
insertinto@indextable(nid)selectidfromluntanwherethis_id=@this_idorderbyreply_timedesc
真的是妙趣横生!!setrowcount@PageUpperBound当纪录数到达@PageUpperBound时就会中断处置查询
,selectid只把id列掏出放光临时内外,selecta.*fromluntana,@indextabletwherea.id=t.nid
andt.id>@PageLowerBoundandt.id<=@PageUpperBoundorderbyt.id
而这句也只从表中掏出所必要的纪录,而不是一切的纪录,分离起来,极年夜的进步了效力!!
妙啊,真的妙!!!!

CREATEPROCEDUREPaging_RowCount
(
@Tablesvarchar(1000),
@PKvarchar(100),
@Sortvarchar(200)=NULL,
@PageNumberint=1,
@PageSizeint=10,
@Fieldsvarchar(1000)=*,
@Filtervarchar(1000)=NULL,
@Groupvarchar(1000)=NULL)
AS
/*DefaultSorting*/
IF@SortISNULLOR@Sort=
SET@Sort=@PK
/*Findthe@PKtype*/
DECLARE@SortTablevarchar(100)
DECLARE@SortNamevarchar(100)
DECLARE@strSortColumnvarchar(200)
DECLARE@operatorchar(2)
DECLARE@typevarchar(100)
DECLARE@precint
/*Setsortingvariables.*/
IFCHARINDEX(DESC,@Sort)>0
BEGIN
SET@strSortColumn=REPLACE(@Sort,DESC,)
SET@operator=<=
END
ELSE
BEGIN
IFCHARINDEX(ASC,@Sort)=0
SET@strSortColumn=REPLACE(@Sort,ASC,)
SET@operator=>=
END

IFCHARINDEX(.,@strSortColumn)>0
BEGIN
SET@SortTable=SUBSTRING(@strSortColumn,0,CHARINDEX(.,@strSortColumn))
SET@SortName=SUBSTRING(@strSortColumn,CHARINDEX(.,@strSortColumn)+1,LEN(@strSortColumn))
END
ELSE
BEGIN
SET@SortTable=@Tables
SET@SortName=@strSortColumn
END
SELECT@type=t.name,@prec=c.prec
FROMsysobjectso
JOINsyscolumnscono.id=c.id
JOINsystypestonc.xusertype=t.xusertype
WHEREo.name=@SortTableANDc.name=@SortName
IFCHARINDEX(char,@type)>0
SET@type=@type+(+CAST(@precASvarchar)+)
DECLARE@strPageSizevarchar(50)
DECLARE@strStartRowvarchar(50)
DECLARE@strFiltervarchar(1000)
DECLARE@strSimpleFiltervarchar(1000)
DECLARE@strGroupvarchar(1000)
/*DefaultPageNumber*/
IF@PageNumber<1
SET@PageNumber=1
/*Setpagingvariables.*/
SET@strPageSize=CAST(@PageSizeASvarchar(50))
SET@strStartRow=CAST(((@PageNumber-1)*@PageSize+1)ASvarchar(50))
/*Setfilter&groupvariables.*/
IF@FilterISNOTNULLAND@Filter!=
BEGIN
SET@strFilter=WHERE+@Filter+
SET@strSimpleFilter=AND+@Filter+
END
ELSE
BEGIN
SET@strSimpleFilter=
SET@strFilter=
END
IF@GroupISNOTNULLAND@Group!=
SET@strGroup=GROUPBY+@Group+
ELSE
SET@strGroup=

/*Executedynamicquery*/
EXEC(

DECLARE@SortColumn+@type+
SETROWCOUNT+@strStartRow+
SELECT@SortColumn=+@strSortColumn+FROM+@Tables+@strFilter++@strGroup+ORDERBY+@Sort+
SETROWCOUNT+@strPageSize+
SELECT+@Fields+FROM+@Tables+WHERE+@strSortColumn+@operator+@SortColumn+@strSimpleFilter++@strGroup+ORDERBY+@Sort+

)
GO
平台即服务PaaS、基础设施即服务IaaS、软件即服务SaaS都是我们比较熟悉的MySQL学习教程,现在又出现了数据库即服务DBaaS,以基于云的方式存储结构化数据。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-27 18:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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