仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 763|回复: 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,以基于云的方式存储结构化数据。
分手快乐 该用户已被删除
9#
发表于 2015-3-24 12:09:00 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
老尸 该用户已被删除
8#
发表于 2015-3-17 16:11:36 | 只看该作者
然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情
谁可相欹 该用户已被删除
7#
发表于 2015-3-10 23:51:51 | 只看该作者
分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查询,效率会低于未分区表的相同语句。
若相依 该用户已被删除
6#
发表于 2015-3-1 21:22:58 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
第二个灵魂 该用户已被删除
5#
发表于 2015-2-11 04:10:16 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
不帅 该用户已被删除
地板
发表于 2015-2-5 04:08:47 | 只看该作者
大家注意一点。如下面的例子:
柔情似水 该用户已被删除
板凳
发表于 2015-1-27 07:31:19 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
沙发
发表于 2015-1-19 18:26:48 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-11 06:37

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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