【问题标题】:Select records around a specific record from database从数据库中选择特定记录周围的记录
【发布时间】:2015-05-13 19:55:38
【问题描述】:

抱歉,标题含糊不清,但如果我知道如何用英语表达这个 - 会使用 google :) 所以问题来了:假设我们有一个查询:

SELECT A.*, B.* FROM ... JOIN ... ORDER BY WHATEVER

我基本上需要做的是获取这个结果集并将其缩小为具有特定 A.id + 一些相邻记录的记录。

例如,如果我们的结果集返回 A.id =

1, 2, 3, (4, 5, 6, [7], 8, 9, 10), 11, 12

我基本上需要(括号)中的部分,包括目标记录[7]。

由于可能涉及简单或复杂的查询,并且排序可能不同,我不能只说“给我记录 id>=4 和 id

一个(也许)更清晰和现实的例子:

  • 每页列出 50 张照片
  • 提供排序和过滤功能
  • 当您点击任何页面上的照片时,应该有一个带有其他照片的导航,该导航将在带有所选过滤器的“分页”中围绕所点击的照片进行
  • 过滤器是会话存储的,所以在这里它们不是问题

【问题讨论】:

  • 你如何定义多一点和少一点?
  • SELECT * FROM (SELECT * FROM x WHERE z >= n ORDER BY z) 一个 UNION (SELECT WHERE z
  • @Strawberry 我认为这可能行得通!将其移至答案,我会接受它
  • @BillGregg 我认为这与分页无关。它更像是提取分页结果集的一部分

标签: mysql sql


【解决方案1】:

你可以这样做:

select t.*
from table t join
     (<your query here>) recs
     on t.id between recs.id - 3 and recs.id + 3;

【讨论】:

  • 很遗憾,不能依赖 ID。还是我在这里遗漏了“t.id”声明?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多