昨天介紹了Oracle分頁實現方案,那么,mysql又是如何實現分頁呢?
參考官網:https://dev.mysql.com/doc/refman/5.7/en/select.html
MySQL中實現分頁查詢:在數據量較小的情況下可使用limit查詢來實現分頁查詢,在數據量大的情況下使用建立主鍵或唯一索引來實現,另外可通過order by對其排序。
The LIMIT clause can be used to constrain the number of rows returned by the SELECT statement. LIMIT takes one or two numeric arguments, which must both be nonnegative integer constants, with these exceptions:
先看一下limit語法
SELECT * FROM TABLE
[ORDER BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
LIMIT子句可以被用于強制 SELECT 語句返回指定的記錄數。LIMIT接受一個或兩個數字參數。參數必須是一個整數常量。
如果給定兩個參數,第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。初始記錄行的偏移量是 0(而不是 1)。
1.1、傳統實現方式
一般情況下,客戶端通過傳遞 pageNo(頁碼)、pageSize(每頁條數)兩個參數去分頁查詢數據庫中的數據,在數據量較小(元組百/千級)時使用 MySQL自帶的 limit 來解決這個問題
--pageNo:頁碼
--pagesize:每頁顯示的條數
select * from table limit (pageNo-1)*pageSize,pageSize;
1.2、建立主鍵或者唯一索引(高效)
在數據量較小的時候簡單的使用 limit 進行數據分頁在性能上面不會有明顯的緩慢,但是數據量達到了 萬級到百萬級 sql語句的性能將會影響數據的返回。這時需要利用主鍵或者唯一索引進行數據分頁;
--pageNo:頁碼
--pagesize:每頁顯示的條數
--假設主鍵或者唯一索引為 t_id
select * from table where t_id > (pageNo-1)*pageSize limit pageSize;
1.3、基于數據再排序
當需要返回的信息為順序或者倒序時,對上面的語句基于數據再排序。order by ASC/DESC 順序或倒序 默認為順序
select * from table where t_id > (pageNo-1)*pageSize order by t_id limit pageSize;
Oracle中有專門的rownum()顯示行號的函數,而MySQL沒有專門的顯示行號函數,但可以通過用@rownum自定義變量顯示行號。
一般實現過程如下:
SELECT
(@rownum := @rownum + 1) AS rownum,
t.*
FROM
table t,
(SELECT @rownum := 0) AS rn
3.1、環境準備
CREATE TABLE t (
EMPNO BIGINT ( 4 ) NOT NULL,
ENAME VARCHAR ( 10 ),
JOB VARCHAR ( 9 ),
MGR BIGINT ( 4 ),
HIREDATE date,
SAL BIGINT ( 10 ),
COMM BIGINT ( 10 ),
DEPTNO BIGINT ( 2 ),
PRIMARY KEY ( `EMPNO` )
) ENGINE = INNODB;
INSERT INTO t VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800', NULL, '20');
INSERT INTO t VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600', '300', '30');
INSERT INTO t VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250', '500', '30');
INSERT INTO t VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975', NULL, '20');
INSERT INTO t VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250', '1400', '30');
INSERT INTO t VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850', NULL, '30');
INSERT INTO t VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450', NULL, '10');
INSERT INTO t VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-04-19', '3000', NULL, '20');
INSERT INTO t VALUES ('7839', 'KING', 'PRESIDENT', NULL, '1981-11-17', '5000', NULL, '10');
INSERT INTO t VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500', '0', '30');
INSERT INTO t VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-05-23', '1100', NULL, '20');
INSERT INTO t VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950', NULL, '30');
INSERT INTO t VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000', NULL, '20');
INSERT INTO t VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300', NULL, '10');
commit;
3.2、limit分頁
--查詢第一頁,每頁顯示5條數據
select * from t order by empno desc limit (1-1)*5,5;
--查詢第二頁,每頁顯示4條數據
select * from t order by empno desc limit (2-1)*4,4;
3.3、查詢顯示行號
--查詢第二頁,每頁顯示4條數據,并在第一列加上行號
select (@rownum := @rownum + 1) AS rownum,t.* from t,
(SELECT @rownum := 0) AS rn
order by t.empno desc
limit 4,4;
覺得有用的朋友多幫忙轉發哦!后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~
ello,大家好!今天要和大家分享一個非常實用的小技巧——如何在業務場景中使用JavaScript對數組進行分頁展示。無論你是前端萌新,還是正在努力提升自己技能的小伙伴,這篇文章都會對你有所幫助哦!
想象一下,我們正在開發一個購物網站,需要展示大量的商品數據。如果一下子展示太多,用戶體驗肯定不好。這時候分頁展示就顯得尤為重要了!如何用JavaScript實現這一需求呢?別急,我們一步步來。
其實,實現數組分頁非常簡單。我們可以借助JavaScript的slice方法來達到目的。下面是具體的代碼示例:
const arr = Array(100).fill().map((_, i) => i); // 創建一個包含100個元素的數組
const paginate = (array, pageSize, pageNumber) => {
return array.slice((pageNumber - 1) * pageSize, pageNumber * pageSize);
};
// 示例:分頁展示
console.log(paginate(arr, 10, 1)); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(paginate(arr, 10, 2)); // [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
console.log(paginate(arr, 10, 3)); // [20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
通過console.log輸出結果,我們可以清楚地看到分頁后的數組片段:
console.log(paginate(arr, 10, 1)); // 第一頁:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(paginate(arr, 10, 2)); // 第二頁:[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
console.log(paginate(arr, 10, 3)); // 第三頁:[20, 21, 22, 23, 24, 25, 26, 27, 28, 29]
看吧!實現分頁是不是很簡單?只要幾行代碼,就能輕松搞定數組的分頁展示。希望這個小技巧能為你的項目帶來幫助!如果你還有其他關于JavaScript的問題或想學習更多的編程知識,歡迎在評論區留言,我們一起討論進步哦!
對分頁的理解
1.每次需要展示多少條數據
2.根據每次展示條數進行計算來看需要分多少頁
3.需要注意的就是最后數據可能沒有達到展示的條數需要進行平滑處理
4.其他就是點擊后的背景顏色和數據展示效果
//通過ajax獲取數據庫內容,這里獲取全額數據是為了分頁的頁碼
function selectMysql(){
*請認真填寫需求信息,我們會在24小時內與您取得聯系。