如何在MySQL中獲取下一個(gè)/上一個(gè)記錄?假設(shè)我有ID 3,4,7,9的記錄,我希望能夠通過(guò)下一個(gè)/上一個(gè)鏈接導(dǎo)航從一個(gè)到另一個(gè)。問(wèn)題是,我不知道如何獲取最近的更高ID的記錄。因此,當(dāng)我有一個(gè)ID為4的記錄時(shí),我需要能夠獲取下一個(gè)現(xiàn)有記錄,這將是7.查詢(xún)可能看起來(lái)像SELECT * FROM foo WHERE id = 4 OFFSET 1如何在不獲取整個(gè)結(jié)果集并手動(dòng)迭代的情況下獲取下一個(gè)/上一個(gè)記錄?我正在使用MySQL 5。
3 回答

烙印99
TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
除了cemkalyoncu的解決方案:
下一條記錄:
SELECT * FROM foo WHERE id > 4 ORDER BY id LIMIT 1;
之前的紀(jì)錄:
SELECT * FROM foo WHERE id < 4 ORDER BY id DESC LIMIT 1;
編輯:由于這個(gè)答案最近得到了一些upvotes,我真的想強(qiáng)調(diào)我之前做的關(guān)于理解主鍵列不是要排序的列的評(píng)論,因?yàn)镸ySQL不保證更高,自動(dòng)遞增,值必須在以后添加。
如果你不關(guān)心這個(gè),只需要更高(或更低)的記錄,id
那么這就足夠了。只是不要將其用作確定記錄是否實(shí)際在以后(或更早)添加的方法。例如,請(qǐng)考慮使用datetime列進(jìn)行排序。

慕森卡
TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
以上所有解決方案都需要兩次數(shù)據(jù)庫(kù)調(diào)用 下面的sql代碼將兩個(gè)sql語(yǔ)句合并為一個(gè)。
select * from foo where ( id = IFNULL((select min(id) from foo where id > 4),0) or id = IFNULL((select max(id) from foo where id < 4),0) )

繁星點(diǎn)點(diǎn)滴滴
TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊
下一個(gè):
select * from foo where id = (select min(id) from foo where id > 4)
以前:
select * from foo where id = (select max(id) from foo where id < 4)
添加回答
舉報(bào)
0/150
提交
取消