最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql如何查詢(xún)某條記錄在分頁(yè)的第幾頁(yè)詳析

 更新時(shí)間:2018年11月21日 08:39:55   作者:二師兄  
查詢(xún)是我們?nèi)粘9ぷ髦薪?jīng)常會(huì)遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Mysql如何查詢(xún)某條記錄在分頁(yè)的第幾頁(yè)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

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

下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的實(shí)現(xiàn)方法吧

根據(jù)ID查詢(xún)分頁(yè)位置

根據(jù)ID來(lái)查詢(xún)分頁(yè)位置,比如按照ID的倒序排列,則可通過(guò)以下SQL查詢(xún)出大于此ID記錄數(shù):

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

示例中user為表名,5位待匹配的id。很顯然,因?yàn)槭堑剐蚺判蛑恍璨檎掖笥诖薸d的記錄數(shù)即可,如果是正序排列,則小于此id即可。

當(dāng)查出count值之后,怎么計(jì)算當(dāng)前記錄位于第幾頁(yè)呢,這里以java代碼示例計(jì)算:

int pageSize = 10;
// 假設(shè)上面查出的結(jié)果為count,值為11
int count = 11;
// 計(jì)算當(dāng)前記錄所在的pageNum
// 通過(guò)取模并加1獲得當(dāng)前頁(yè)數(shù)為第2頁(yè)
int pageNum = count/pageSize + 1;
// 如果想進(jìn)一步獲得在某頁(yè)的某個(gè)位置,則再進(jìn)行取余即可,即第2頁(yè)的第1條記錄(從0開(kāi)始)
int index = count%pageSize;

多維度排序定位

上面通過(guò)簡(jiǎn)單的ID進(jìn)行排序還是比較好解決的,那么如果現(xiàn)在查詢(xún)某條記錄排序的維度不僅僅是ID,比如先按照年齡(age)進(jìn)行倒序排序,如果age相同,則再跟進(jìn)ID進(jìn)行倒序排序?;镜膕ql語(yǔ)句如下:

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

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

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

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

這樣就可以查詢(xún)出來(lái)此組合排序age不相同時(shí)此條記錄的位置,具體位置的算法同第一種情況。

那么當(dāng)age用重復(fù)的情況如何處理呢。當(dāng)然,可以通過(guò)復(fù)雜的關(guān)聯(lián)查詢(xún)或子表查詢(xún)來(lái)實(shí)現(xiàn),這里通過(guò)另外一種方式,就是再查詢(xún)一下age相同,并且id大于當(dāng)前用戶(hù)的記錄條數(shù):

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

上面獲得了age相同情況下,并且id大于5的記錄,將第一步和第二步的統(tǒng)計(jì)結(jié)果相加,問(wèn)題是不是又回到了《根據(jù)ID查詢(xún)分頁(yè)位置》的簡(jiǎn)單模式了,還是同樣的算法可以算出當(dāng)前記錄位于第幾頁(yè)了。

此種方案雖然查詢(xún)了兩次數(shù)據(jù)庫(kù),如果很好的建立索引,比關(guān)聯(lián)查詢(xún)或子查詢(xún)要方便、簡(jiǎn)潔和高效一些。

小結(jié)

以上是在實(shí)踐中遇到類(lèi)似問(wèn)題的兩個(gè)思考維度,希望能給大家?guī)?lái)一個(gè)突破,同時(shí)也希望大家提供更好的方案。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • MySQL常用聚合函數(shù)詳解

    MySQL常用聚合函數(shù)詳解

    下面小編就為大家?guī)?lái)一篇MySQL常用聚合函數(shù)詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • Mysql插入中文變?yōu)槿珕?wèn)號(hào)???的問(wèn)題 解決方法

    Mysql插入中文變?yōu)槿珕?wèn)號(hào)???的問(wèn)題 解決方法

    這篇文章介紹了Mysql插入中文變?yōu)槿珕?wèn)號(hào)???的問(wèn)題 解決方法,有需要的朋友可以參考一下
    2013-09-09
  • Redis與MySQL如何保證雙寫(xiě)一致性詳解

    Redis與MySQL如何保證雙寫(xiě)一致性詳解

    雙寫(xiě)一致性指的是當(dāng)我們更新了數(shù)據(jù)庫(kù)的數(shù)據(jù)之后redis中的數(shù)據(jù)?也要同步去更新,本文主要給大家詳細(xì)介紹了Redis與MySQL雙寫(xiě)一致性如何保證,需要的朋友可以參考下
    2023-09-09
  • SQL行列轉(zhuǎn)置以及非常規(guī)的行列轉(zhuǎn)置示例代碼

    SQL行列轉(zhuǎn)置以及非常規(guī)的行列轉(zhuǎn)置示例代碼

    轉(zhuǎn)置即旋轉(zhuǎn)數(shù)據(jù)表的橫縱方向,常用來(lái)改變數(shù)據(jù)布局,以便用新的角度觀察,下面這篇文章主要給大家介紹了關(guān)于SQL行列轉(zhuǎn)置以及非常規(guī)行列轉(zhuǎn)置的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Mysql外鍵約束的創(chuàng)建與刪除的使用

    Mysql外鍵約束的創(chuàng)建與刪除的使用

    本文主要介紹了Mysql外鍵約束的創(chuàng)建與刪除的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SQL實(shí)現(xiàn)LeetCode(197.上升溫度)

    SQL實(shí)現(xiàn)LeetCode(197.上升溫度)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(197.上升溫度),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MySQL DATE_ADD和ADDDATE函數(shù)實(shí)現(xiàn)向日期添加指定時(shí)間間隔

    MySQL DATE_ADD和ADDDATE函數(shù)實(shí)現(xiàn)向日期添加指定時(shí)間間隔

    這篇文章主要介紹了MySQL DATE_ADD和ADDDATE函數(shù)實(shí)現(xiàn)向日期添加指定時(shí)間間隔,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • SQL性能優(yōu)化方法及性能測(cè)試

    SQL性能優(yōu)化方法及性能測(cè)試

    這篇文章主要介紹了SQL性能優(yōu)化方法及性能測(cè)試,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-05-05
  • ERROR 1045 (28000): Access denied for user ''''root''''@''''localhost'''' (using password: YES)實(shí)用解決方案

    ERROR 1045 (28000): Access denied for user ''''root''''@''''

    這篇文章主要介紹了Linux下數(shù)據(jù)庫(kù)報(bào)ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)實(shí)用解決方案,希望能對(duì)大家有幫助。
    2017-10-10
  • 詳解Mysql中explain執(zhí)行計(jì)劃信息中字段

    詳解Mysql中explain執(zhí)行計(jì)劃信息中字段

    Extra是EXPLAIN輸出中另外一個(gè)很重要的列,該列顯示MySQL在查詢(xún)過(guò)程中的一些詳細(xì)信息,MySQL查詢(xún)優(yōu)化器執(zhí)行查詢(xún)的過(guò)程中對(duì)查詢(xún)計(jì)劃的重要補(bǔ)充信息,這篇文章主要介紹了Mysql中explain執(zhí)行計(jì)劃信息中字段詳解,需要的朋友可以參考下
    2023-08-08

最新評(píng)論

登封市| 沂南县| 仁怀市| 汉沽区| 察雅县| 临漳县| 桂东县| 公安县| 洛浦县| 河间市| 商河县| 铜川市| 逊克县| 章丘市| 勃利县| 浠水县| 津市市| 正镶白旗| 黄平县| 应用必备| 法库县| 成安县| 黎川县| 长兴县| 怀远县| 江西省| 定州市| 中超| 开原市| 涿鹿县| 思茅市| 浦城县| 军事| 上饶县| 嘉义市| 香格里拉县| 永和县| 丰都县| 大荔县| 衢州市| 徐闻县|