91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql如何查詢某條記錄在分頁的第幾頁詳析

發布時間:2020-09-07 10:59:01 來源:腳本之家 閱讀:419 作者:二師兄 欄目:MySQL數據庫

前言

在實踐中我們會遇到這樣的問題,知道某條記錄的id,然后需要判斷此條記錄如果按照id進行排序分頁,此條記錄在第幾頁。今天這篇文章為大家提供一個思路。

下面話不多說了,來一起看看詳細的實現方法吧

根據ID查詢分頁位置

根據ID來查詢分頁位置,比如按照ID的倒序排列,則可通過以下SQL查詢出大于此ID記錄數:

select count(id) from user where id > 5;

示例中user為表名,5位待匹配的id。很顯然,因為是倒序排序只需查找大于此id的記錄數即可,如果是正序排列,則小于此id即可。

當查出count值之后,怎么計算當前記錄位于第幾頁呢,這里以java代碼示例計算:

int pageSize = 10;
// 假設上面查出的結果為count,值為11
int count = 11;
// 計算當前記錄所在的pageNum
// 通過取模并加1獲得當前頁數為第2頁
int pageNum = count/pageSize + 1;
// 如果想進一步獲得在某頁的某個位置,則再進行取余即可,即第2頁的第1條記錄(從0開始)
int index = count%pageSize;

多維度排序定位

上面通過簡單的ID進行排序還是比較好解決的,那么如果現在查詢某條記錄排序的維度不僅僅是ID,比如先按照年齡(age)進行倒序排序,如果age相同,則再跟進ID進行倒序排序。基本的sql語句如下:

select id, age from user order by age desc,id desc;

此時我們知道某條id為5,age為18的記錄,如何確定出此條記錄在多條件排序中的位置呢。

首先,多條件排序的難度在于age相同的情況,如果age不相同,只需如下sql即可像《根據ID查詢分頁位置》一樣定位出id的位置:

select count(id) from user where age > 18;

這樣就可以查詢出來此組合排序age不相同時此條記錄的位置,具體位置的算法同第一種情況。

那么當age用重復的情況如何處理呢。當然,可以通過復雜的關聯查詢或子表查詢來實現,這里通過另外一種方式,就是再查詢一下age相同,并且id大于當前用戶的記錄條數:

select count(id) from user where age = 18 and id > 5;

上面獲得了age相同情況下,并且id大于5的記錄,將第一步和第二步的統計結果相加,問題是不是又回到了《根據ID查詢分頁位置》的簡單模式了,還是同樣的算法可以算出當前記錄位于第幾頁了。

此種方案雖然查詢了兩次數據庫,如果很好的建立索引,比關聯查詢或子查詢要方便、簡潔和高效一些。

小結

以上是在實踐中遇到類似問題的兩個思考維度,希望能給大家帶來一個突破,同時也希望大家提供更好的方案。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉祥县| 呼伦贝尔市| 城固县| 繁昌县| 民县| 柏乡县| 琼中| 蒙城县| 阳原县| 冕宁县| 高平市| 汤阴县| 贵南县| 江都市| 义马市| 晴隆县| 凉城县| 富锦市| 株洲县| 洱源县| 九龙城区| 崇明县| 周宁县| 阆中市| 潞西市| 渭南市| 临沧市| 新兴县| 沂南县| 略阳县| 阿坝县| 通河县| 方正县| 定西市| 东乡县| 安义县| 奇台县| 郸城县| 温宿县| 涟水县| 南投市|