導航:首頁 > 編程大全 > table對資料庫數據進行分頁

table對資料庫數據進行分頁

發布時間:2023-05-12 16:03:56

1. datatable 如何分頁

DataTable分頁代碼如下:

///<summary>
///根據索引和pagesize返回記錄
///</summary>
///<paramname="dt">記錄集DataTable</param>
///<paramname="PageIndex">當前頁</param>
///<paramname="pagesize">一頁的記錄數</param>
///<returns></returns>
(DataTabledt,intPageIndex,intPageSize)
{
if(PageIndex==0)
returndt;
DataTablenewdt=dt.Clone();
//newdt.Clear();
introwbegin=(PageIndex-1)*PageSize;
introwend=PageIndex*PageSize;

if(rowbegin>=dt.Rows.Count)
returnnewdt;

if(rowend>dt.Rows.Count)
rowend=dt.Rows.Count;
for(inti=rowbegin;i<=rowend-1;i++)
{
DataRownewdr=newdt.NewRow();
DataRowdr=dt.Rows[i];
foreach(DataColumncolumnindt.Columns)
{
newdr[column.ColumnName]=dr[column.ColumnName];
}
newdt.Rows.Add(newdr);
}

returnnewdt;
}

2. jquery datatable如何動態分頁

一、分頁

分頁的基本思想是根據datatable的頁碼及每頁顯示的行數,將數據從資料庫分段提出,然後再填充到表格中,以達到分頁的效果。

這里需要用到datatable插件的幾個屬性:

"sEcho":這個屬性需要原封不動地傳回給datatable,具體的作用我也不清楚,但是根據它值的變化情況來看,好像是一個操作次數的計數(之前我一直把它當做是pageindex來用,結果發現,不論我在datatable中是翻下一頁還是翻上一頁,它一直在增加。)

"iDisplayStart":這個屬性,根據字面意思理解,就是每段數據開始的行數,比如第一頁的數據就是從0開始計,那麼它就是0,每頁顯示的行數是10,那麼第二頁的第一行的iDisplayStart就是10。

"iDisplayLength":這個屬性就是每頁顯示的行數。

然後是資料庫操作,只需要從資料庫查詢其中一段數據,然後輸出出來,轉成jsON格式,讓datatable插件獲取。在網上可以找到很多分頁的方法,選擇了其中一種,使用row_number()的分頁的存儲過程。具體代碼如下(根據sql創建存儲過程模板):

因為測試,所以只提取了表中的三個欄位,並且關閉了數據過濾及排序功能,其中,"bLengthChange"可以設置成true,因為服務端會獲取datatable的iDisplayLenth參數,即使每頁顯示數變化,數據也可以正常獲取。

這樣就實現了jquery.datatable插件的服務端分頁獲取數據。

3. 關於table分頁的問題

代碼好長.看不下去了...如果改好了拿去封裝一下吧.以後也好用.不過如果嫌豎灶友麻煩的話可以直接去下載一個分頁控制項余槐辯喚.那就簡單多了.比如Aspnetpager...

4. asp.net使用table實現自定義分頁

我靠,老大一看你以前都是用asp的。用個GridView控制項不都解決了么,response別濫用會破壞頁面結構的。

5. 請問怎麼樣將資料庫中取出的5行數據進行分頁,對應放在5個頁面中,第一行放在第一頁,其他對應放置.

主要是sql 語句了
用兩個參數 我寫過
我總結的鄭鉛模板 供參考(其實是分頁的話 就一個頁面 只是數據在變)
PAGESIZE:每頁顯示的記錄數 一般從頁面獲取 (用戶自主姿高設置)
CURRENTPAGE:當前頁號 頁面獲取
數據表的名字喊冊好是:components
索引主鍵字是:id
select top PAGESIZE * from components where id not in
(select top (PAGESIZE*(CURRENTPAGE-1))
id from components order by id)order by id

6. mysql資料庫分頁

很多應用往往只展示最新或最熱門的幾條記錄,但為了舊記錄仍然可訪問,所以就需要個分頁的導航欄。然而,如何通過MySQL更好的實現分頁,始終是比較令人頭疼的問題。雖然沒有拿來就能用的解決辦法,但了解資料庫的底層或多或少有助於優化分頁查詢。

我們先從一個常用但性能很差的查詢來看一看。

SELECT *
FROM city
ORDER BY id DESC
LIMIT 0, 15

這個查詢耗時0.00sec。So,這個查詢有什麼問題呢?實際上,這個查詢語句和參數都沒有問題,因為它用到了下面表的主鍵,而且只讀取15條記錄。

CREATE TABLE city (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
city varchar(128) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;

真正的問題在於offset(分頁偏移量)很大的時候,像下面這樣:

SELECT *
FROM city
ORDER BY id DESC
LIMIT 100000, 15;

上面的查詢在有2M行記錄時需要0.22sec,通過EXPLAIN查看SQL的執行計劃可以發現該SQL檢索了100015行,但最後只需要15行。大的分頁偏移量會增加使用的數據,MySQL會將大量最終不會使用的數據載入到內存中。就算我們假設大部分網站的用戶只訪問前幾頁數據,但少量的大的分頁偏移量的請求也會對整個系統造成危害。Facebook意識到了這一點,但Facebook並沒有為了每秒可以處理更多的請求而去優化資料庫,而是將重心放在將請求響應時間的方差變小。

對於分頁請求,還有一個信息也很重要,就是總共的記錄數。我們可以通過下面的查詢很容易的獲取總的記錄數。

SELECT COUNT(*)
FROM city;

然而,上面的SQL在採用InnoDB為存儲引擎時需要耗費9.28sec。一個不正確的優化是採用 SQL_CALC_FOUND_ROWS,SQL_CALC_FOUND_ROWS 可以在能夠在分頁查詢時事先准備好符合條件的記錄數,隨後只要執行一句 select FOUND_ROWS(); 就能獲得總記錄數。但是在大多數情況下,查詢語句簡短並不意味著性能的提高。不幸的是,這種分頁查詢方式在許多主流框架中都有用到,下面看看這個語句的查詢性能。

SELECT SQL_CALC_FOUND_ROWS *
FROM city
ORDER BY id DESC
LIMIT 100000, 15;

這個語句耗時20.02sec,是上一個的兩倍。事實證明使用 SQL_CALC_FOUND_ROWS 做分頁是很糟糕的想法。
下面來看看到底如何優化。文章分為兩部分,第一部分是如何獲取記錄的總數目,第二部分是獲取真正的記錄。

高效的計算行數

如果採用的引擎是MyISAM,可以直接執行COUNT(*)去獲取行數即可。相似的,在堆表中也會將行數存儲到表的元信息中。但如果引擎是InnoDB情況就會復雜一些,因為InnoDB不保存表的具體行數。

我們可以將行數緩存起來,然後可以通過一個守護進程定期更新或者用戶的某些操作導致緩存失效時,執行下面的語句:

SELECT COUNT(*)
FROM city
USE INDEX(PRIMARY);

獲取記錄

下面進入這篇文章最重要的部分,獲取分頁要展示的記錄。上面已經說過了,大的偏移量會影響性能,所以我們要重寫查詢語句。為了演示,我們創建一個新的表「news」,按照時事性排序(最新發布的在最前面),實現一個高性能的分頁。為了簡單,我們就假設最新發布的新聞的Id也是最大的。

CREATE TABLE news(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(128) NOT NULL
) ENGINE=InnoDB;

一個比較高效的方式是基於用戶展示的最後一個新聞Id。查詢下一頁的語句如下,需要傳入當前頁面展示的最後一個Id。

SELECT *
FROM news WHERE id < $last_id
ORDER BY id DESC
LIMIT $perpage

查詢上一頁的語句類似,只不過需要傳入當前頁的第一個Id,並且要逆序。

SELECT *
FROM news WHERE id > $last_id
ORDER BY id ASC
LIMIT $perpage

上面的查詢方式適合實現簡易的分頁,即不顯示具體的頁數導航,只顯示「上一頁」和「下一頁」,例如博客中頁腳顯示「上一頁」,「下一頁」的按鈕。但如果要實現真正的頁面導航還是很難的,下面看看另一種方式。

SELECT id
FROM (
SELECT id, ((@cnt:= @cnt + 1) + $perpage - 1) % $perpage cnt
FROM news
JOIN (SELECT @cnt:= 0)T
WHERE id < $last_id
ORDER BY id DESC
LIMIT $perpage * $buttons
)C
WHERE cnt = 0;

通過上面的語句可以為每一個分頁的按鈕計算出一個offset對應的id。這種方法還有一個好處。假設,網站上正在發布一片新的文章,那麼所有文章的位置都會往後移一位,所以如果用戶在發布文章時換頁,那麼他會看見一篇文章兩次。如果固定了每個按鈕的offset Id,這個問題就迎刃而解了。Mark Callaghan發表過一篇類似的博客,利用了組合索引和兩個位置變數,但是基本思想是一致的。

如果表中的記錄很少被刪除、修改,還可以將記錄對應的頁碼存儲到表中,並在該列上創建合適的索引。採用這種方式,當新增一個記錄的時候,需要執行下面的查詢重新生成對應的頁號。

SET p:= 0;
UPDATE news SET page=CEIL((p:= p + 1) / $perpage) ORDER BY id DESC;

當然,也可以新增一個專用於分頁的表,可以用個後台程序來維護。

UPDATE pagination T
JOIN (
SELECT id, CEIL((p:= p + 1) / $perpage) page
FROM news
ORDER BY id
)C
ON C.id = T.id
SET T.page = C.page;

現在想獲取任意一頁的元素就很簡單了:

SELECT *
FROM news A
JOIN pagination B ON A.id=B.ID
WHERE page=$offset;

還有另外一種與上種方法比較相似的方法來做分頁,這種方式比較試用於數據集相對小,並且沒有可用的索引的情況下—比如處理搜索結果時。在一個普通的伺服器上執行下面的查詢,當有2M條記錄時,要耗費2sec左右。這種方式比較簡單,創建一個用來存儲所有Id的臨時表即可(這也是最耗費性能的地方)。

CREATE TEMPORARY TABLE _tmp (KEY SORT(random))
SELECT id, FLOOR(RAND() * 0x8000000) random
FROM city;

ALTER TABLE _tmp ADD OFFSET INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, DROP INDEX SORT,ORDER BY random;

接下來就可以向下面一樣執行分頁查詢了。

SELECT *
FROM _tmp
WHERE OFFSET >= $offset
ORDER BY OFFSET
LIMIT $perpage;

簡單來說,對於分頁的優化就是。。。避免數據量大時掃描過多的記錄。

7. oracle資料庫怎麼實現分頁,且每頁三條數據

您好:oracle查詢分頁可分為兩種情況,一種使用的是rownum ,另外一種則是使用 row_number() over(order by column_name desc)。
1.使用rownum分頁查詢,可用以下方式:
select t2.* from (select t1.*,rownum as rn from table_name t1 where 1=1 and rownum <= page * page_size) t2 where t2.rn > (page - 1) * page_size;
2.使用 row_number() over() 分頁查詢
select t2.* from (select t1.*,row_number() over(order by column_name desc) as rn from table_name t1 where 1=1 )t2 where t2.rn > (page-1)* page_size and t2.rn <= page * page_size;
這種方式,也是可以分頁的。
希望能幫助您!

8. 如何將js從資料庫中渲染出來的數據做成table分頁

您好
如果要在jsp頁面里實現按你要求分頁的話,你可以循環方式這樣寫
for(int i=初始紀錄樹版;i<最大記權錄數;i++){
list.add(從資料庫取出的又放進去的ArrayList<對象>);
}
之後在從list里取用循環取出並輸出在前台頁面。這里的初始記錄數為(currentPage-1)*pageSize,這里的最大記錄數為currentPage*pageSize。
每次請求都是該頁面,而僅僅是***.jsp?currentPage=?這個問號不同而已。
當然不贊成把JAVA代碼放在JSP頁面,因為它僅僅是用來展示而盡量不要參與邏輯業務。要放在控制層或業務層。比如說去請求servlet。
並且一次取所有數據的分頁並不適合當數據量很大的時候。可以使用資料庫分頁。如mysql 用top,oracle用rownum。

9. 查詢資料庫時,如何有效實現分頁

針對查詢抄語句做處理,同時襲對請求頁面地址做分析
list.aspx?pageid=5 //表示訪問第五頁
後台語言里,先對查詢條件做預處理
pagepre=pagesize*4 //pagesize 用於表示分頁大小,例如10,則前4頁共有40條記錄
查詢語句
sqlcmd="select top "+pagesize+" from tabelname where id not in (select top "+pagepre+" from tablename order by id desc)"
操作原理為將當前頁前顯示的所有記錄從數據查詢結果中排除,也就是not in 後面的部分,然後從剩餘的結果沖,讀取pagesize大小的記錄值。篩選條件、排序條件放在子查詢中

10. 水晶報表中如何根據datatable中的某一列的內容自動分頁

用「節(分組?)專家"建立對這個欄位的分組,就會自動出現一個group 的head, foot節。這個節里就是分組模板,可以加入小計什麼的,也可以右鍵點這個節,在屬性里設定組後分頁,這樣就可以仿衡一個分組完了之後自動分賣稿頁備配做了。

閱讀全文

與table對資料庫數據進行分頁相關的資料

熱點內容
財政保障水平分析取哪個數據 瀏覽:391
linux下增加路由命令 瀏覽:419
iphone沖刷固件 瀏覽:604
網路機房平面圖 瀏覽:579
筆記本電腦卡慢怎麼處理win10 瀏覽:77
編程模擬用什麼軟體 瀏覽:424
數控編程到哪裡找工作 瀏覽:48
ps濾鏡液化膨脹工具 瀏覽:426
一張表的數據比例是多少 瀏覽:497
微信綁不了交行信用卡嗎 瀏覽:86
泰住建201764號文件內容 瀏覽:23
Excel管理文件夾 瀏覽:427
步進編程式控制制器如何設置密碼 瀏覽:43
郵件預覽能打開壓縮文件嗎 瀏覽:615
ps怎麼輸出透明背景的mp4文件 瀏覽:930
廣安哪裡學習數控編程 瀏覽:899
哪些公司好進行數據分析 瀏覽:965
被淘汰的網路熱詞有哪些 瀏覽:956
爐石傳說安卓能不能玩 瀏覽:715
為什麼記事本不能生成c文件 瀏覽:90

友情鏈接