主頁(yè) > 知識(shí)庫(kù) > Mysql如何查詢某條記錄在分頁(yè)的第幾頁(yè)詳析

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

熱門標(biāo)簽:湘潭電銷機(jī)器人咨詢電話 高德地圖標(biāo)注模式 高德地圖標(biāo)注中心個(gè)人注冊(cè) 電銷機(jī)器人針對(duì)的 400電話辦理都選易號(hào)網(wǎng) 寶應(yīng)電信400電話辦理費(fèi)用 外呼系統(tǒng)防封號(hào)違法嗎 如何在高德地圖標(biāo)注新地址 外呼系統(tǒng)服務(wù)

前言

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

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

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

根據(jù)ID來(lái)查詢分頁(yè)位置,比如按照ID的倒序排列,則可通過(guò)以下SQL查詢出大于此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開始)
int index = count%pageSize;

多維度排序定位

上面通過(guò)簡(jiǎn)單的ID進(jìn)行排序還是比較好解決的,那么如果現(xià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查詢分頁(yè)位置》一樣定位出id的位置:

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

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

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

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

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

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

小結(jié)

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

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

您可能感興趣的文章:
  • 淺談mysql的子查詢聯(lián)合與in的效率
  • 詳解Mysql多表聯(lián)合查詢效率分析及優(yōu)化
  • 對(duì)MySQL幾種聯(lián)合查詢的通俗解釋
  • Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹
  • Mysql聯(lián)合查詢UNION和Order by同時(shí)使用報(bào)錯(cuò)問(wèn)題的解決辦法
  • mysql多表聯(lián)合查詢返回一張表的內(nèi)容實(shí)現(xiàn)代碼
  • mysql使用from與join兩表查詢的區(qū)別總結(jié)
  • Mysql查詢正在執(zhí)行的事務(wù)以及等待鎖的操作方式
  • MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析
  • Mysql兩表聯(lián)合查詢的四種情況總結(jié)

標(biāo)簽:宿遷 佛山 南充 賀州 黔南 蘭州 黃山 馬鞍山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Mysql如何查詢某條記錄在分頁(yè)的第幾頁(yè)詳析》,本文關(guān)鍵詞  Mysql,如何,查詢,某條,記錄,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Mysql如何查詢某條記錄在分頁(yè)的第幾頁(yè)詳析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Mysql如何查詢某條記錄在分頁(yè)的第幾頁(yè)詳析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章