整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          一文看懂MYSQL分頁實現方案,值得收藏

          昨天介紹了Oracle分頁實現方案,那么,mysql又是如何實現分頁呢?

          參考官網:https://dev.mysql.com/doc/refman/5.7/en/select.html


          mysql分頁實現

          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:

          • Within prepared statements, LIMIT parameters can be specified using ? placeholder markers.
          • Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables.

          1、limit分頁實現

          先看一下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; 



          2、查詢顯示行號(實現類似Oracle數據庫的ROWNUM())

          Oracle中有專門的rownum()顯示行號的函數,而MySQL沒有專門的顯示行號函數,但可以通過用@rownum自定義變量顯示行號。

          一般實現過程如下:

          SELECT 
            (@rownum := @rownum + 1) AS rownum,
            t.* 
          FROM
            table t,
            (SELECT @rownum := 0) AS rn



          3、實例演示

          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數組分頁的實現

          其實,實現數組分頁非常簡單。我們可以借助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]

          代碼講解

          1. 創建數組:我們用Array(100).fill().map((_, i) => i)創建了一個包含100個元素的數組,每個元素的值等于它的索引。
          2. 定義分頁函數paginate函數接收三個參數:
          • array:需要分頁的數組
          • pageSize:每頁展示的元素數量
          • pageNumber:當前頁碼,從1開始計數
          1. 實現分頁邏輯:通過slice方法,根據pageNumberpageSize計算出要返回的數組片段。具體來說,第一個參數是(pageNumber - 1) * pageSize,第二個參數是pageNumber * pageSize

          應用示例

          通過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(){


          主站蜘蛛池模板: 一区二区三区四区无限乱码| 亚洲一区二区中文| 无码人妻精品一区二区三| 正在播放国产一区| 亚洲欧美成人一区二区三区 | 伊人色综合视频一区二区三区| 精品人妻一区二区三区毛片| 在线免费视频一区| 精品国产一区二区三区AV| 亚洲熟女乱色一区二区三区| 国产福利一区二区三区在线视频| 国产一区二区三区不卡观| 国产一区二区精品久久岳| 午夜福利国产一区二区| 日韩在线一区二区三区视频| 久久精品无码一区二区三区不卡| 无码人妻视频一区二区三区| 亚洲午夜福利AV一区二区无码| 精品国产亚洲一区二区在线观看| 精品视频午夜一区二区| 日本中文一区二区三区亚洲| 国产精品资源一区二区| 国产精品一区二区三区久久| 国产精品综合一区二区三区| 日本精品视频一区二区三区| 国产亚洲福利一区二区免费看| 国产三级一区二区三区| 香蕉久久AⅤ一区二区三区| 亚洲一区精品伊人久久伊人| 欧洲精品无码一区二区三区在线播放 | 成人精品一区二区户外勾搭野战| 亚洲第一区视频在线观看| 精品国产福利一区二区| 亚洲高清一区二区三区电影| 国产精品电影一区二区三区| 亚洲国产精品一区二区第一页免| 国产在线精品一区免费香蕉| 日韩精品区一区二区三VR| 爆乳无码AV一区二区三区| 黑人一区二区三区中文字幕| 国产在线视频一区二区三区98|