选择 X 个“最接近”的 ID?

aze*_*era 5 mysql sql

假设您有一个带有名为“table_id”的整数主键的表

是否可以在单个查询中提取具有特定 id 的行以及该行之前的 X 行以及之后的 X 行?

例如,如果您的 id 为 (1,2,8,12,16,120,250,354),X 为 2,并且您拥有的 id 为 16,则选择应返回 id 为 8,12,16,120,250 的行

我知道如何通过多个查询来完成此操作,我想知道如何在一次传递中完成此操作(子查询、联合等都很好)。

谢谢你的帮助

Guf*_*ffa 5

您可以在之前的项目以及之后的项目和之后的项目之间建立并集,但必须将它们设置为子查询才能对它们进行排序:

select * from (
  select * from thetable where table_id >= 16 order by table_id limit 3
) x
union all
select * from (
  select * from thetable where table_id < 16 order by table_id desc limit 2
) y
order by table_id
Run Code Online (Sandbox Code Playgroud)