真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言處理分頁,go 分詞

請問這三種方式實現(xiàn)的分頁哪個效率最高

說明:1.支持多表查詢 2.支持任意排序 3.不支持表別名

專注于為中小企業(yè)提供成都網(wǎng)站建設、成都網(wǎng)站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)白云鄂免費做網(wǎng)站提供優(yōu)質(zhì)的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。

參考了

evafly920:[分享]千萬數(shù)量級分頁存儲過程(效果演示)

地址:

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, --每頁記錄數(shù)

@CurrentPage INT, --當前頁,0表示第1頁

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

@Group VARCHAR(200) = '', --分組依據(jù),可以為空,不用填 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

--調(diào)用例子:

--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'

與自定義分頁結(jié)合例子:

/Files/jiny-z/Paging_Custom.rar

alter PROCEDURE SP_Pagination

/**//*

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

** 分頁存儲過程 **

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

參數(shù)說明:

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返回總行數(shù),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

/**//*設置分頁參數(shù).*/

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 '總行數(shù)'

end

else

begin

--得到總頁數(shù)

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

if @CurrentPage @PageCount

begin

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

end

else

begin

/**//*執(zhí)行查詢語句*/

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

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

分頁查詢的方法已經(jīng)很多很多,在這里我也加入成為其中一員。

SQL Server中有一個Set Rowcount的的設置,它的意思是使命令的處理在響應指定的行數(shù)之后停止處理命令,利用這個特點,我們可以借用它來在一個千萬行級數(shù)據(jù)表中實現(xiàn)高性能分頁查詢。先來說說實現(xiàn)方式:

1、我們來假定Table中有一個已經(jīng)建立了索引的主鍵字段ID(整數(shù)型),我們將按照這個字段來取數(shù)據(jù)進行分頁。

2、頁的大小我們放在@PageSize中

3、當前頁號我們放在@CurrentPage中

4、如何讓記錄指針快速滾動到我們要取的數(shù)據(jù)開頭的那一行呢,這是關鍵所在!有了Set RowCount,我們就很容易實現(xiàn)了。

5、如果我們成功地滾動記錄指針到我們要取的數(shù)據(jù)的開頭的那一行,然后我們把那一行的記錄的ID字段的值記錄下來,那么,利用Top和條件,我們就很容易的得到指定頁的數(shù)據(jù)了。當然,有了Set RowCount,我們難道還用Top么?

看看Set Rowcount怎么來幫我們的忙吧:

Declare @ID int

Declare @MoveRecords int

--@CurrentPage和@PageSize是傳入?yún)?shù)

Set @MoveRecords=@CurrentPage * @PageSize+1

--下面兩行實現(xiàn)快速滾動到我們要取的數(shù)據(jù)的行,并把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條),看看有多快!

分享]千萬數(shù)量級分頁存儲過程(帶效果演示)

效果演示:

CREATE PROCEDURE CN5135_SP_Pagination

/**//*

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

** 千萬數(shù)量級分頁存儲過程 **

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

參數(shù)說明:

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

/**//*設置分頁參數(shù).*/

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 = ''

/**//*執(zhí)行查詢語句*/

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)如表名參數(shù)為多表連接時,sort列必須指定表名;

2)只支持單字段排序,有朋友如果問為什么不做成可以多字段排序的,理論上確實有這種可能性,但需要以一定的效率損失為代價,而且會使方法過于復雜,如真有這種需要,完全可以寫一個單獨的分頁存儲過程,無論在性能還是復雜度上都比通用要簡單.

在同一頁面中如何實現(xiàn)查詢并分頁顯示結(jié)果

建立access的數(shù)據(jù)庫news,還有表news,表的字段(id,title),id唯一,輸入數(shù)據(jù)保存,用下面代碼可查詢,可分頁

-----------------------下面保存為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輸入搜索內(nèi)容: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

%

'數(shù)據(jù)庫查詢

'獲得搜索內(nèi)容

cx = request("cx")

dim pageCount

'把page轉(zhuǎn)換成整數(shù)

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)};"

' 獲取產(chǎn)品的名字記錄集(從 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

'如果沒有數(shù)據(jù)記錄

if rs.bof then

errmsg=errmsg+"br"+"li"+keyword+"沒有記錄,請返回!!"

response.write errmsg

response.end

end if

' 設置記錄集在每頁的總行數(shù),也就是 PageSize屬性

RS.PageSize=40

'把rs.pageCount轉(zhuǎn)換成整數(shù)和page才能作比較

pageCount = cint(rs.pageCount)

' 設置當前的頁號( AbsolutePage屬性)

if page = 0 then

page =1

end if

RS.AbsolutePage = page

x=1

' 顯示當前頁中的所有記錄( PageSize中設置的行數(shù))

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轉(zhuǎn)換成整數(shù)

'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"搜索內(nèi)容:%=cx%/td

/tr

/table/center/div

/body/html

%

rs.close

Set rs=nothing

conn.close

set conn=nothing

%

分頁頁數(shù)太多怎么處理?

分頁存儲過程如果按主鍵來排序,速度還是比較快的,但是如果按照LIKE條件查詢字符串,那速度會下降很多,排序字段是個非常關鍵的因素,提供一個存儲過程,調(diào)用這個存儲賽程就可以了,參考如下:

CREATE PROC proc_pageview

@tbname sysname, --要分頁顯示的表名

@FieldKey nvarchar(1000), --用于定位記錄的主鍵(惟一鍵)字段,可以是逗號分隔的多個字段

@PageCurrent int=1, --要顯示的頁碼

@PageSize int=10, --每頁的大小(記錄數(shù))

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

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

@Where varchar(1000)='', --查詢條件

@RecordCount int OUTPUT --總頁數(shù)

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"不是表、視圖或者表值函數(shù)',1,16,@tbname)

RETURN

END

--分頁字段檢查

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

BEGIN

RAISERROR(N'分頁處理需要主鍵(或者惟一鍵)',1,16)

RETURN

END

--其他參數(shù)檢查及規(guī)范

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值,則計算總頁數(shù)(這樣設計可以只在第一次計算總頁數(shù),以后調(diào)用時,把總頁數(shù)傳回給存儲過程,避免再次計算總頁數(shù),對于不想計算總頁數(shù)的處理而言,可以給@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')'

--執(zhí)行查詢

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 開發(fā) RESTful API(下)

當客戶端在 發(fā)出POST請求時/albums,您希望將請求正文中描述的專輯添加到現(xiàn)有專輯數(shù)據(jù)中。

為此,您將編寫以下內(nèi)容:

1、編寫代碼

a.添加代碼以將專輯數(shù)據(jù)添加到專輯列表。

在此代碼中:

1)用于Context.BindJSON 將請求正文綁定到newAlbum。

2) album將從 JSON 初始化的結(jié)構附加到albums 切片。

3)向響應添加201狀態(tài)代碼,以及表示您添加的專輯的 JSON。

b.更改您的main函數(shù),使其包含該router.POST函數(shù),如下所示。

在此代碼中:

1)將路徑中的POST方法與 /albumspostAlbums函數(shù)相關聯(lián)。

使用 Gin,您可以將處理程序與 HTTP 方法和路徑組合相關聯(lián)。這樣,您可以根據(jù)客戶端使用的方法將發(fā)送到單個路徑的請求單獨路由。

a.如果服務器從上一節(jié)開始仍在運行,請停止它。

b.從包含 main.go 的目錄中的命令行,運行代碼。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發(fā)出請求。

該命令應顯示添加專輯的標題和 JSON。

d.與上一節(jié)一樣,使用curl檢索完整的專輯列表,您可以使用它來確認添加了新專輯。

該命令應顯示專輯列表。

當客戶端向 發(fā)出請求時GET /albums/[id],您希望返回 ID 與id路徑參數(shù)匹配的專輯。

為此,您將:

a.在您在上一節(jié)中添加的函數(shù)下方postAlbums,粘貼以下代碼以檢索特定專輯。

此getAlbumByID函數(shù)將提取請求路徑中的 ID,然后找到匹配的專輯。

在此代碼中:

(1)Context.Param用于從 URL 中檢索id路徑參數(shù)。當您將此處理程序映射到路徑時,您將在路徑中包含參數(shù)的占位符。

(2)循環(huán)album切片中的結(jié)構,尋找其ID 字段值與id參數(shù)值匹配的結(jié)構。如果找到,則將該album結(jié)構序列化為 JSON,并將其作為帶有200 OK HTTP 代碼的響應返回。

如上所述,實際使用中的服務可能會使用數(shù)據(jù)庫查詢來執(zhí)行此查找。

(3)如果找不到專輯,則返回 HTTP 404錯誤。

b.最后,更改您的main,使其包含對router.GET的新調(diào)用,路徑現(xiàn)在為/albums/:id ,如以下示例所示。

在此代碼中:

(1)將/albums/:id路徑與getAlbumByID功能相關聯(lián)。在 Gin 中,路徑中項目前面的冒號表示該項目是路徑參數(shù)。

a.如果服務器從上一節(jié)開始仍在運行,請停止它。

b.在包含 main.go 的目錄中的命令行中,運行代碼以啟動服務器。

c.從不同的命令行窗口,用于curl向正在運行的 Web 服務發(fā)出請求。

該命令應顯示您使用其 ID 的專輯的 JSON。如果找不到專輯,您將收到帶有錯誤消息的 JSON。

恭喜!您剛剛使用 Go 和 Gin 編寫了一個簡單的 RESTful Web 服務。

本節(jié)包含您使用本教程構建的應用程序的代碼。

beego數(shù)據(jù)怎么分頁page limit

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

console.log(docs);

//將數(shù)據(jù)顯示到網(wǎng)頁上

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

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

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

分頁問題

分頁例子,對大量數(shù)據(jù)不行,

大量據(jù)數(shù)要用存儲過程

%

'連接數(shù)據(jù)庫

'執(zhí)行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+存儲分頁,看一下實現(xiàn)的方法,自己就可以寫了

/////////////////分頁的代碼/////////////

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'總頁數(shù)為:'+cast(@total as varchar(6))+'頁'

/////////////////分頁的代碼/////////////


標題名稱:go語言處理分頁,go 分詞
轉(zhuǎn)載來源:http://weahome.cn/article/hspiss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部