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

MySQL按字母顺序查询前后记录,实现企业详情页上下导航

嘿,这个需求在企业详情页里太常见啦!我给你整理了两种最常用的解决方案,适配不同的排序场景:

方案1:按企业名称的字典序获取上下家

从你的例子来看,上下家是按名称的字典顺序(C→D→E)排列的,那咱们就基于名称字段来查询:

步骤1:先获取当前企业的名称(可选,也可以用子查询直接关联)

你已经知道当前企业ID是4,名称是D,不过如果想动态适配任意ID,可以先查名称:

SELECT name FROM sample WHERE id = 4;

步骤2:查询上一家企业(名称小于D的最大值)

找比当前名称小的所有企业里,名称排序最靠后的那个:

SELECT * FROM sample WHERE name < 'D' ORDER BY name DESC LIMIT 1;

步骤3:查询下一家企业(名称大于D的最小值)

找比当前名称大的所有企业里,名称排序最靠前的那个:

SELECT * FROM sample WHERE name > 'D' ORDER BY name ASC LIMIT 1;

进阶写法:用子查询一步到位

不想单独查当前名称的话,直接嵌套子查询,这样不管当前ID是多少都能通用:

-- 上一家
SELECT * FROM sample 
WHERE name < (SELECT name FROM sample WHERE id = 4) 
ORDER BY name DESC LIMIT 1;

-- 下一家
SELECT * FROM sample 
WHERE name > (SELECT name FROM sample WHERE id = 4) 
ORDER BY name ASC LIMIT 1;
方案2:按企业ID的顺序获取上下家(如果ID是自增且和展示顺序一致)

如果你的企业是按ID自增插入的,且上下家的顺序就是ID的先后顺序,那这个写法更简单高效:

-- 上一家(ID小于4的最大ID)
SELECT * FROM sample WHERE id < 4 ORDER BY id DESC LIMIT 1;

-- 下一家(ID大于4的最小ID)
SELECT * FROM sample WHERE id > 4 ORDER BY id ASC LIMIT 1;
注意事项
  • 边界处理:如果当前企业是列表的第一条,上一家查询会返回空;如果是最后一条,下一家查询返回空。前端展示时要判断这种情况,比如隐藏对应的跳转按钮。
  • 自定义排序:如果你的上下家是按其他字段排序(比如创建时间、注册日期),只需要把name字段换成对应的字段就行,逻辑完全一样。比如按create_time排序:
-- 上一家(创建时间早于当前的最新记录)
SELECT * FROM sample 
WHERE create_time < (SELECT create_time FROM sample WHERE id = 4) 
ORDER BY create_time DESC LIMIT 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:25:15