我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

go语言处理分页,go 分词

请问这三种方式实现的分页哪个效率最高

说明:1.支持多表查询 2.支持任意排序 3.不支持表别名

专注于为中小企业提供成都网站建设、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业白云鄂免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

参考了

evafly920:[分享]千万数量级分页存储过程(效果演示)

地址:

IF(EXISTS(SELECT * FROM sysobjects WHERE [id]=OBJECT_ID('usp_PagingLarge') AND xtype='P'))

DROP PROCEDURE usp_PagingLarge

*/

GO

CREATE PROCEDURE usp_PagingLarge

@TableNames VARCHAR(200), --表名,可以是多个表,但不能用别名

@PrimaryKey VARCHAR(100), --主键,可以为空,但@Order为空时该值不能为空

@Fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *

@PageSize INT, --每页记录数

@CurrentPage INT, --当前页,0表示第1页

@Filter VARCHAR(200) = '', --条件,可以为空,不用填 where

@Group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by

@Order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by

AS

BEGIN

DECLARE @SortColumn VARCHAR(200)

DECLARE @Operator CHAR(2)

DECLARE @SortTable VARCHAR(200)

DECLARE @SortName VARCHAR(200)

IF @Fields = ''

SET @Fields = '*'

IF @Filter = ''

SET @Filter = 'WHERE 1=1'

ELSE

SET @Filter = 'WHERE ' + @Filter

IF @Group ''

SET @Group = 'GROUP BY ' + @Group

IF @Order ''

BEGIN

DECLARE @pos1 INT, @pos2 INT

SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')

IF CHARINDEX(' DESC', @Order) 0

IF CHARINDEX(' ASC', @Order) 0

BEGIN

IF CHARINDEX(' DESC', @Order) CHARINDEX(' ASC', @Order)

SET @Operator = '='

ELSE

SET @Operator = '='

END

ELSE

SET @Operator = '='

ELSE

SET @Operator = '='

SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')

SET @pos1 = CHARINDEX(',', @SortColumn)

IF @pos1 0

SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)

SET @pos2 = CHARINDEX('.', @SortColumn)

IF @pos2 0

BEGIN

SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)

IF @pos1 0

SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)

ELSE

SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)

END

ELSE

BEGIN

SET @SortTable = @TableNames

SET @SortName = @SortColumn

END

END

ELSE

BEGIN

SET @SortColumn = @PrimaryKey

SET @SortTable = @TableNames

SET @SortName = @SortColumn

SET @Order = @SortColumn

SET @Operator = '='

END

DECLARE @type varchar(50)

DECLARE @prec int

SELECT @type=t.name, @prec=c.prec

FROM sysobjects o

JOIN syscolumns c on o.id=c.id

JOIN systypes t on c.xusertype=t.xusertype

WHERE o.name = @SortTable AND c.name = @SortName

IF CHARINDEX('char', @type) 0

SET @type = @type + '(' + CAST(@prec AS varchar) + ')'

DECLARE @TopRows INT

SET @TopRows = @PageSize * @CurrentPage + 1

print @TopRows

print @Operator

EXEC('

DECLARE @SortColumnBegin ' + @type + '

SET ROWCOUNT ' + @TopRows + '

SELECT @SortColumnBegin=' + @SortColumn + ' FROM ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '

SET ROWCOUNT ' + @PageSize + '

SELECT ' + @Fields + ' FROM ' + @TableNames + ' ' + @Filter + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '

')

END

GO

--调用例子:

--1.单表/单排序

EXEC usp_PagingLarge 'bigtable','d_id','d_id,d_title,d_content,d_time',20,1,'','','d_id desc'

--2.单表/多排序

EXEC usp_PagingLarge 'bigtable','d_id','*',20,0,'','','d_time asc,d_id desc'

--3.多表/单排序

EXEC usp_PagingLarge 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 20, 0, '', '', 'bigtable.d_id asc'

--4.多表/多排序

EXEC usp_PagingLarge 'bigtable left join bigtable_author on bigtable.d_id=bigtable_author.BigTable_id', 'bigtable.d_id', 'bigtable.d_id,bigtable.d_title,bigtable.d_content,bigtable.d_time,bigtable_author.d_author', 20, 0, '', '', 'bigtable.d_time asc,bigtable.d_id desc'

与自定义分页结合例子:

/Files/jiny-z/Paging_Custom.rar

alter PROCEDURE SP_Pagination

/**//*

***************************************************************

** 分页存储过程 **

***************************************************************

参数说明:

1.Tables :表名称,视图

2.PrimaryKey :主关键字

3.Sort :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc

4.CurrentPage :当前页码

5.PageSize :分页尺寸

6.Fields:字段

6.Filter :过滤语句,不带Where

7.Group :Group语句,不带Group By

8.docount: 1返回总行数,0返回列表

***************************************************************/

(

@Tables varchar(1000),

@PrimaryKey varchar(100),

@Sort varchar(200) = NULL,

@CurrentPage int = 1,

@PageSize int = 10,

@Fields varchar(1000) = '*',

@Filter varchar(1000) = NULL,

@Group varchar(1000) = NULL,

@docount bit = 0

)

AS

/**//*默认排序*/

IF @Sort IS NULL OR @Sort = ''

SET @Sort = @PrimaryKey

DECLARE @SortTable varchar(100)

DECLARE @SortName varchar(100)

DECLARE @strSortColumn varchar(200)

DECLARE @operator char(2)

DECLARE @type varchar(100)

DECLARE @prec int

/**//*设定排序语句.*/

IF CHARINDEX('DESC',@Sort)0

BEGIN

SET @strSortColumn = REPLACE(@Sort, 'DESC', '')

SET @operator = '='

END

ELSE

BEGIN

IF CHARINDEX('ASC', @Sort) = 0

SET @strSortColumn = REPLACE(@Sort, 'ASC', '')

SET @operator = '='

END

IF CHARINDEX('.', @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

FROM sysobjects o

JOIN syscolumns c on o.id=c.id

JOIN systypes t on c.xusertype=t.xusertype

WHERE o.name = @SortTable AND c.name = @SortName

IF CHARINDEX('char', @type) 0

SET @type = @type + '(' + CAST(@prec AS varchar) + ')'

DECLARE @strPageSize varchar(50)

DECLARE @strStartRow varchar(50)

DECLARE @strFilter varchar(200)

DECLARE @strSimpleFilter varchar(200)

DECLARE @strGroup varchar(200)

/**//*默认当前页*/

IF @CurrentPage 1

SET @CurrentPage = 1

/**//*设置分页参数.*/

SET @strPageSize = CAST(@PageSize AS varchar(50))

SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS varchar(50))

/**//*筛选以及分组语句.*/

IF @Filter IS NOT NULL AND @Filter != ''

BEGIN

SET @strFilter = ' WHERE ' + @Filter + ' '

SET @strSimpleFilter = ' AND ' + @Filter + ' '

END

ELSE

BEGIN

SET @strSimpleFilter = ''

SET @strFilter = ''

END

IF @Group IS NOT NULL AND @Group != ''

SET @strGroup = ' GROUP BY ' + @Group + ' '

ELSE

SET @strGroup = ''

declare @cTemp NVarChar(1000)

declare @PageCount int, @lineCount decimal

CREATE TABLE #temp(linecount INT)

set @cTemp = 'insert into #temp (linecount) select count(*) FROM ' + @Tables + @strFilter + ' ' + @strGroup

exec (@cTemp)

select @lineCount = linecount from #temp

drop table #temp

if(@docount=1)

begin

select @lineCount '总行数'

end

else

begin

--得到总页数

set @PageCount = CEILING(@lineCount/@strPageSize)

if @CurrentPage @PageCount

begin

set @cTemp = 'SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE 12 '

end

else

begin

/**//*执行查询语句*/

set @cTemp = 'DECLARE @SortColumn ' + @type + '

SET ROWCOUNT ' + @strStartRow + '

SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '

SET ROWCOUNT ' + @strPageSize + '

SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + ''

end

--print @cTemp

EXEC(@cTemp)

end

-----------------------------------------------------

分页查询的方法已经很多很多,在这里我也加入成为其中一员。

SQL Server中有一个Set Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处理命令,利用这个特点,我们可以借用它来在一个千万行级数据表中实现高性能分页查询。先来说说实现方式:

1、我们来假定Table中有一个已经建立了索引的主键字段ID(整数型),我们将按照这个字段来取数据进行分页。

2、页的大小我们放在@PageSize中

3、当前页号我们放在@CurrentPage中

4、如何让记录指针快速滚动到我们要取的数据开头的那一行呢,这是关键所在!有了Set RowCount,我们就很容易实现了。

5、如果我们成功地滚动记录指针到我们要取的数据的开头的那一行,然后我们把那一行的记录的ID字段的值记录下来,那么,利用Top和条件,我们就很容易的得到指定页的数据了。当然,有了Set RowCount,我们难道还用Top么?

看看Set Rowcount怎么来帮我们的忙吧:

Declare @ID int

Declare @MoveRecords int

--@CurrentPage和@PageSize是传入参数

Set @MoveRecords=@CurrentPage * @PageSize+1

--下面两行实现快速滚动到我们要取的数据的行,并把ID记录下来

Set Rowcount @MoveRecords

Select @ID=ID from Table1 Order by ID

Set Rowcount @PageSize

--最恨为了减少麻烦使用*了,但是在这里为了说明方便,暂时用一下

Select * From Table1 Where ID=@ID Order By ID

Set Rowcount 0

大家可以试试看,在一个1千W记录的表里面,一下子方翻页到第100页(每页100条),看看有多快!

分享]千万数量级分页存储过程(带效果演示)

效果演示:

CREATE PROCEDURE CN5135_SP_Pagination

/**//*

***************************************************************

** 千万数量级分页存储过程 **

***************************************************************

参数说明:

1.Tables :表名称,视图

2.PrimaryKey :主关键字

3.Sort :排序语句,不带Order By 比如:NewsID Desc,OrderRows Asc

4.CurrentPage :当前页码

5.PageSize :分页尺寸

6.Filter :过滤语句,不带Where

7.Group :Group语句,不带Group By

效果演示:

***************************************************************/

(

@Tables varchar(1000),

@PrimaryKey varchar(100),

@Sort varchar(200) = NULL,

@CurrentPage int = 1,

@PageSize int = 10,

@Fields varchar(1000) = '*',

@Filter varchar(1000) = NULL,

@Group varchar(1000) = NULL

)

AS

/**//*默认排序*/

IF @Sort IS NULL OR @Sort = ''

SET @Sort = @PrimaryKey

DECLARE @SortTable varchar(100)

DECLARE @SortName varchar(100)

DECLARE @strSortColumn varchar(200)

DECLARE @operator char(2)

DECLARE @type varchar(100)

DECLARE @prec int

/**//*设定排序语句.*/

IF CHARINDEX('DESC',@Sort)0

BEGIN

SET @strSortColumn = REPLACE(@Sort, 'DESC', '')

SET @operator = '='

END

ELSE

BEGIN

IF CHARINDEX('ASC', @Sort) = 0

SET @strSortColumn = REPLACE(@Sort, 'ASC', '')

SET @operator = '='

END

IF CHARINDEX('.', @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

FROM sysobjects o

JOIN syscolumns c on o.id=c.id

JOIN systypes t on c.xusertype=t.xusertype

WHERE o.name = @SortTable AND c.name = @SortName

IF CHARINDEX('char', @type) 0

SET @type = @type + '(' + CAST(@prec AS varchar) + ')'

DECLARE @strPageSize varchar(50)

DECLARE @strStartRow varchar(50)

DECLARE @strFilter varchar(1000)

DECLARE @strSimpleFilter varchar(1000)

DECLARE @strGroup varchar(1000)

/**//*默认当前页*/

IF @CurrentPage 1

SET @CurrentPage = 1

/**//*设置分页参数.*/

SET @strPageSize = CAST(@PageSize AS varchar(50))

SET @strStartRow = CAST(((@CurrentPage - 1)*@PageSize + 1) AS varchar(50))

/**//*筛选以及分组语句.*/

IF @Filter IS NOT NULL AND @Filter != ''

BEGIN

SET @strFilter = ' WHERE ' + @Filter + ' '

SET @strSimpleFilter = ' AND ' + @Filter + ' '

END

ELSE

BEGIN

SET @strSimpleFilter = ''

SET @strFilter = ''

END

IF @Group IS NOT NULL AND @Group != ''

SET @strGroup = ' GROUP BY ' + @Group + ' '

ELSE

SET @strGroup = ''

/**//*执行查询语句*/

EXEC(

'

DECLARE @SortColumn ' + @type + '

SET ROWCOUNT ' + @strStartRow + '

SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '

SET ROWCOUNT ' + @strPageSize + '

SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '

'

)

GO

注:

1)如表名参数为多表连接时,sort列必须指定表名;

2)只支持单字段排序,有朋友如果问为什么不做成可以多字段排序的,理论上确实有这种可能性,但需要以一定的效率损失为代价,而且会使方法过于复杂,如真有这种需要,完全可以写一个单独的分页存储过程,无论在性能还是复杂度上都比通用要简单.

在同一页面中如何实现查询并分页显示结果

建立access的数据库news,还有表news,表的字段(id,title),id唯一,输入数据保存,用下面代码可查询,可分页

-----------------------下面保存为search.asp--------------------------

html

head

meta http-equiv="Content-Type" content="text/html; charset=gb2312"

title文件/title

/head

body bgcolor="#ffffff"

!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"

script

function btn_ck_bh_Click()

{

var cx = document.form1.cxsj.value;

form1.action ="search.asp?cx="+cx;

}

/script

table border="1" cellspacing="0" bgcolor="#F0F8FF" bordercolorlight="#4DA6FF" bordercolordark="#ECF5FF" width="88%" style="word-break:break-all"

tr

td width="778" align="center" colspan="7"

form method="POST" name="form1" action=search.asp

p输入搜索内容:input type="text" name="cxsj" size="20"input type="submit" value="提交" name="B1" LANGUAGE="javascript" onclick="btn_ck_bh_Click()"

input type="reset" value="重写" name="B2"/p

/form

/td

/tr

/table

table border="1" cellspacing="0" bgcolor="#F0F8FF" bordercolorlight="#4DA6FF" bordercolordark="#ECF5FF" width="88%" style="word-break:break-all"

tr

td width="8%" align="center"strongfont color="#0080C0"ID 号/font/strong/td

td width="58%" align="center"strongfont color="#0080C0"标 题/font/strong/td

td width="8%" align="center"strongfont color="#0080C0"修 改/font/strong/td

td width="8%" align="center"strongfont color="#0080C0"删 除/font/strong/td

/tr

%

'数据库查询

'获得搜索内容

cx = request("cx")

dim pageCount

'把page转换成整数

page = cint(request("page"))

set conn=server.createobject("adodb.connection")'

set rs=server.createobject("adodb.recordset")

conn.open "DBQ=" server.mappath("./news.mdb") ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"

' 获取产品的名字记录集(从 news表中)

if cx "" then

sql = "select * from news where title like '%"cx "%' order by id desc"

else

sql ="select * from news order by id desc"

end if

rs.open sql,conn,3,3

'如果没有数据记录

if rs.bof then

errmsg=errmsg+"br"+"li"+keyword+"没有记录,请返回!!"

response.write errmsg

response.end

end if

' 设置记录集在每页的总行数,也就是 PageSize属性

RS.PageSize=40

'把rs.pageCount转换成整数和page才能作比较

pageCount = cint(rs.pageCount)

' 设置当前的页号( AbsolutePage属性)

if page = 0 then

page =1

end if

RS.AbsolutePage = page

x=1

' 显示当前页中的所有记录( PageSize中设置的行数)

WHILE NOT RS.EOF AND NumRowsRS.PageSize

%

tr onmouseover="this.bgColor='#99ccff'" onmouseout="this.bgColor=''"

td width="8%"p align="center"%=rs("id")%/td

td width="58%"a href="view.asp?id=%=rs("id")%" target="_blank"%=rs("title")%/a/td

td width="8%" align="center"a href="edit.asp?id="%=rs("id")%修 改/a/td

td width="8%" align="center"a href="delet.asp?id="%=rs("id")%删 除/a/td

/tr

%RS.MoveNext

NumRows=NumRows+1

WEND%

tr onmouseover="this.bgColor='#99ccff'" onmouseout="this.bgColor=''"

td width="105%" align="center" colspan="6" /td /tr

tr

td width="105%" align="center" colspan="6"

p align="center"FONT color=#333333共%=PageCount%页 第%=page%页★

%if page=1 then%首页%end if%

%if page1 then%

A HREF="search.asp?page=1cx=%=cx%" 首页/A

%end if%★

%if page1 then%A HREF="search.asp?page=%=page-1%cx=%=cx%"%end if%上一页/a

%

dim pagewhere

dim p

p = 1

'把pagewhere转换成整数

'pagewhere = cint(request("pagewhere"))

pagewhere = pageCount

if pagewhere0 then

for p=1 to pagewhere

if p page then%

A HREF="search.asp?page=%=p%cx=%=cx%"%=p%/a

%end if

if p =page then%

%=p%

% end if

next

end if%

%if page PageCount then%

A HREF="search.asp?page=%=page+1%cx=%=cx%"

%end if %下一页/A★

%if page=PageCount then%尾页

%end if%

%if pagePageCount then%

A HREF="search.asp?page=%=PageCount%cx=%=cx%" 尾页/A

%end if%

/p/FONT/td /tr tr

td width="105%" align="center" colspan="6"搜索内容:%=cx%/td

/tr

/table/center/div

/body/html

%

rs.close

Set rs=nothing

conn.close

set conn=nothing

%

分页页数太多怎么处理?

分页存储过程如果按主键来排序,速度还是比较快的,但是如果按照LIKE条件查询字符串,那速度会下降很多,排序字段是个非常关键的因素,提供一个存储过程,调用这个存储赛程就可以了,参考如下:

CREATE PROC proc_pageview

@tbname sysname, --要分页显示的表名

@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段

@PageCurrent int=1, --要显示的页码

@PageSize int=10, --每页的大小(记录数)

@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段

@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC

@Where varchar(1000)='', --查询条件

@RecordCount int OUTPUT --总页数

AS

SET NOCOUNT ON

--检查对象是否有效

IF OBJECT_ID(@tbname) IS NULL

BEGIN

RAISERROR(N'对象"%s"不存在',1,16,@tbname)

RETURN

END

IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0

AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0

AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0

BEGIN

RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)

RETURN

END

--分页字段检查

IF ISNULL(@FieldKey,N'')=''

BEGIN

RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)

RETURN

END

--其他参数检查及规范

IF ISNULL(@PageCurrent,0)1 SET @PageCurrent=1

IF ISNULL(@PageSize,0)1 SET @PageSize=10

IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'

IF ISNULL(@FieldOrder,N'')=N''

SET @FieldOrder=N''

ELSE

SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)

IF ISNULL(@Where,N'')=N''

SET @Where=N''

ELSE

SET @Where=N'WHERE ('+@Where+N')'

--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)

IF @RecordCount IS NULL

BEGIN

DECLARE @sql nvarchar(4000)

SET @sql=N'SELECT @RecordCount=COUNT(*)'

+N' FROM '+@tbname

+N' '+@Where

EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT

END

--计算分页显示的TOPN值

DECLARE @TopN varchar(20),@TopN1 varchar(20)

SELECT @TopN=@PageSize,

@TopN1=(@PageCurrent-1)*@PageSize

--第一页直接显示

IF @PageCurrent=1

EXEC(N'SELECT TOP '+@TopN

+N' '+@FieldShow

+N' FROM '+@tbname

+N' '+@Where

+N' '+@FieldOrder)

ELSE

BEGIN

--处理别名

IF @FieldShow=N'*'

SET @FieldShow=N'a.*'

--生成主键(惟一键)处理条件

DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),

@s nvarchar(1000),@Field sysname

SELECT @Where1=N'',@Where2=N'',@s=@FieldKey

WHILE CHARINDEX(N',',@s)0

SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),

@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),

@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,

@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',

@Where=REPLACE(@Where,@Field,N'a.'+@Field),

@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),

@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)

SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),

@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),

@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),

@Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),

@Where2=CASE

WHEN @Where='' THEN N'WHERE ('

ELSE @Where+N' AND ('

END+N'b.'+@s+N' IS NULL'+@Where2+N')'

--执行查询

EXEC(N'SELECT TOP '+@TopN

+N' '+@FieldShow

+N' FROM '+@tbname

+N' a LEFT JOIN(SELECT TOP '+@TopN1

+N' '+@FieldKey

+N' FROM '+@tbname

+N' a '+@Where

+N' '+@FieldOrder

+N')b ON '+@Where1

+N' '+@Where2

+N' '+@FieldOrder)

END

GO

GO语言(十三):使用 Go 和 Gin 开发 RESTful API(下)

当客户端在 发出POST请求时/albums,您希望将请求正文中描述的专辑添加到现有专辑数据中。

为此,您将编写以下内容:

1、编写代码

a.添加代码以将专辑数据添加到专辑列表。

在此代码中:

1)用于Context.BindJSON 将请求正文绑定到newAlbum。

2) album将从 JSON 初始化的结构附加到albums 切片。

3)向响应添加201状态代码,以及表示您添加的专辑的 JSON。

b.更改您的main函数,使其包含该router.POST函数,如下所示。

在此代码中:

1)将路径中的POST方法与 /albumspostAlbums函数相关联。

使用 Gin,您可以将处理程序与 HTTP 方法和路径组合相关联。这样,您可以根据客户端使用的方法将发送到单个路径的请求单独路由。

a.如果服务器从上一节开始仍在运行,请停止它。

b.从包含 main.go 的目录中的命令行,运行代码。

c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。

该命令应显示添加专辑的标题和 JSON。

d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加了新专辑。

该命令应显示专辑列表。

当客户端向 发出请求时GET /albums/[id],您希望返回 ID 与id路径参数匹配的专辑。

为此,您将:

a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑。

此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑。

在此代码中:

(1)Context.Param用于从 URL 中检索id路径参数。当您将此处理程序映射到路径时,您将在路径中包含参数的占位符。

(2)循环album切片中的结构,寻找其ID 字段值与id参数值匹配的结构。如果找到,则将该album结构序列化为 JSON,并将其作为带有200 OK HTTP 代码的响应返回。

如上所述,实际使用中的服务可能会使用数据库查询来执行此查找。

(3)如果找不到专辑,则返回 HTTP 404错误。

b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id ,如以下示例所示。

在此代码中:

(1)将/albums/:id路径与getAlbumByID功能相关联。在 Gin 中,路径中项目前面的冒号表示该项目是路径参数。

a.如果服务器从上一节开始仍在运行,请停止它。

b.在包含 main.go 的目录中的命令行中,运行代码以启动服务器。

c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求。

该命令应显示您使用其 ID 的专辑的 JSON。如果找不到专辑,您将收到带有错误消息的 JSON。

恭喜!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务。

本节包含您使用本教程构建的应用程序的代码。

beego数据怎么分页page limit

collection.find().toArray(function(err,docs){

console.log(docs);

//将数据显示到网页上

// console.log('1'+docs[0].name);

// $('#question').append('div'+docs+'/div');

// document.getElementById("editLevels").value =docs;

分页问题

分页例子,对大量数据不行,

大量据数要用存储过程

%

'连接数据库

'执行sql 改你要的sql

set rs=server.CreateObject("adodb.recordset")%

rs.open "select * from news order by id desc ",conn,1,3

下面的代码就复制用可以了

'分页

i=50

rs.pagesize=i

pu=request("pu")

if pu="" then pu=1

if cint(pu)="0" then pu=1

if cint(pu)rs.pagecount then pu=rs.pagecount

if not rs.eof then rs.absolutepage=cint(pu)

'显示记录

if not rs.eof then

do while not rs.eof and i=1

response.write rs("字段")'显示字段

'就这里改你要的,其它复制用就可以

rs.movenext

i=i-1

loop

end if

%

当前第 %=pu% 页;分

%=rs.pagecount% 页;

共 %=rs.recordcount% 条记录;

每页%=i%条记录

a href="?pu=1"首 页/a

a href="?pu=%=cint(PU)-1%"上一页/a

a href="?pu=%=cint(PU)+1%"下一页/a

a href="?pu=%=rs.pagecount%"末 页/a

--------------------------------------

asp+存储分页,看一下实现的方法,自己就可以写了

/////////////////分页的代码/////////////

use pubs

go

create proc get23

@pageSize int,

@currentPage int,

@totalPage int output

as

declare @strQuery as varchar(1000)

declare @rowCount as int

select @rowCount=count(title_id)from titles

set @totalPage=CEILING(CAST(@rowCount AS FLOAT)/CAST(@pageSize AS FLOAT))

if @currentPage1

begin

if @currentPage@totalPage

begin

set @currentPage=@totalPage

end

set @strQuery='select top '+cast(@pageSize as varchar

(10))+ ' * from titles

where title_id not in(select top '+cast(@pageSize*(@currentPage-1)as varchar(10))+' title_id from titles order by

title_id)

order by title_id'

end

else

begin

set @strQuery='select top '+cast(@pageSize as varchar(10))+'

* from userinfo order by userID'

end

exec (@strQuery)

go

运行代码如下,正确运行,declare @total int

exec get23 2,2,@total output

print'总页数为:'+cast(@total as varchar(6))+'页'

/////////////////分页的代码/////////////


名称栏目:go语言处理分页,go 分词
网址分享:http://shouzuofang.com/article/hspiss.html

其他资讯