MySql通过行号查询上一篇下一篇文章

文章介绍了如何通过行号查询来精确获取多条件排序后上一篇和下一篇文章的信息。首先,展示了一个基于parent_id和first_letter排序的列表查询。然后,通过生成行号,确定指定id数据的行号,最后根据行号正序或倒序查找上/下篇文章。对于生成行号的SQL语句原理,作者表示需要进一步了解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过行号查询上一篇下一篇文章,可以很好的解决多条件、多字段排序造成无法准确获取上一篇下一篇文章的问题。

# 列表查询

SELECT * FROM basic_city WHERE parent_id=70 ORDER BY parent_id,first_letter;

 

以下代行号的列表只做演示用,正常场景下还是以上面这个为准:

# 代行号的列表查询

SELECT @r:=@r+1 AS row_no,c.* 
FROM basic_city AS c,(SELECT @r:=0) AS r 
WHERE parent_id=70 
ORDER BY parent_id,first_letter;

一、先获取指定id等于767的数据在列表里所在的行号(row_no):

SELECT row_no FROM (
    SELECT @r:=@r+1 AS row_no,c.* 
    FROM basic_city AS c,(SELECT @r:=0) AS r 
    WHERE parent_id=70 
    ORDER BY parent_id,first_letter
) AS tmp WHERE id=767;

 

 二、通过行号获取上一篇文章:

SELECT * FROM (
    SELECT @r:=@r+1 AS row_no,c.* 
    FROM basic_city AS c,(SELECT @r:=0) AS r 
    WHERE parent_id=70 
    ORDER BY parent_id,first_letter
) AS tmp

WHERE row_no<4

ORDER BY row_no DESC

LIMIT 1;

三、通过行号获取下一篇文章:

 SELECT * FROM (
    SELECT @r:=@r+1 AS row_no,c.* 
    FROM basic_city AS c,(SELECT @r:=0) AS r 
    WHERE parent_id=70 
    ORDER BY parent_id,first_letter
) AS tmp

WHERE row_no>4

ORDER BY row_no ASC

LIMIT 1;

 

 注:SELECT @r:=0 、@r:=@r+1 这两条语句的原理还不太理解,只知道它是用来生成行号的,有知道的小伙伴望指教,不胜感谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值