You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知当前值时,如何在MySQL中获取数据表的上下记录?

在MySQL 8.0.19中获取当前记录的上/下一条记录

首先明确:数据库表中的记录没有天然的顺序,必须指定排序规则才能定义「上一条」和「下一条」。以下基于你提供的字段,给出两种实用方案,你可根据业务需求调整排序依据。

方案1:按id排序(适用于id可作为顺序标识的场景)

假设你已知当前记录的id = current_id、parentID = current_parentID、appID = current_appID,如果需要限定同parentID和appID下的记录,可使用以下查询:

获取上一条记录(比当前id小的最大id对应的记录)

SELECT *
FROM your_table
WHERE parentID = current_parentID 
  AND appID = current_appID
  AND id < current_id
ORDER BY id DESC
LIMIT 1;

获取下一条记录(比当前id大的最小id对应的记录)

SELECT *
FROM your_table
WHERE parentID = current_parentID 
  AND appID = current_appID
  AND id > current_id
ORDER BY id ASC
LIMIT 1;

若无需限定parentID和appID,直接去掉对应WHERE条件即可。

方案2:按Name字典序排序(适用于id无法作为顺序标识的场景)

假设当前记录的Name = current_name,同样可限定parentID和appID:

获取上一条记录(字典序小于当前Name的最后一条记录)

SELECT *
FROM your_table
WHERE parentID = current_parentID 
  AND appID = current_appID
  AND Name < current_name
ORDER BY Name DESC
LIMIT 1;

获取下一条记录(字典序大于当前Name的第一条记录)

SELECT *
FROM your_table
WHERE parentID = current_parentID 
  AND appID = current_appID
  AND Name > current_name
ORDER BY Name ASC
LIMIT 1;

一次获取上/下两条记录

通过UNION ALL合并两个查询,可一次性拿到结果:

(SELECT *
 FROM your_table
 WHERE parentID = current_parentID 
   AND appID = current_appID
   AND id < current_id
 ORDER BY id DESC
 LIMIT 1)
UNION ALL
(SELECT *
 FROM your_table
 WHERE parentID = current_parentID 
   AND appID = current_appID
   AND id > current_id
 ORDER BY id ASC
 LIMIT 1);

性能优化建议

为避免全表扫描、提升查询速度,建议创建对应联合索引:

  • 若用id排序:
CREATE INDEX idx_parent_app_id ON your_table(parentID, appID, id);
  • 若用Name排序:
CREATE INDEX idx_parent_app_name ON your_table(parentID, appID, Name);

内容的提问来源于stack exchange,提问作者HJP22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 08:15:52