检索mysql结果集中的相邻行

时间:2013-09-18 17:02:55

标签: mysql sql theory

这很简单。我想从结果集中检索相邻的行。

现在来了困难的部分。这个问题是对所有类似问题的一般概括。

假设您有一个表和一个通过提供一些任意但确定的条件从该表中检索的结果集(也就是说,如果重复查询,结果集不会改变)。

+----------+------------------+
|    rid   | ebd              |
+----------+------------------+
|      965 | body of email #2 |
|       26 | body of email #3 |
|        8 | body of email #5 |
|      349 | body of email #6 |  <-- cur
|       11 | body of email #8 |
+----------+------------------+

在我的应用程序中,我正在尝试实现简单的导航,该导航将显示(prev,current,next)链接,这些链接将指向之前的&amp;结果集中的下一个记录。

让我们看一个上面描述的包含非顺序ID(rid)和一些TEXT列(ebd)的简单表。该结果集由提供构成用户提供的过滤器的WHERE和ORDER条件组成。例如,用户试图从当前检索的记录(cur)导航到前一个记录。

现在,我正在尝试了解如何使用 minimal 资源。

更新: 这是我对问题的解决方案,但它非常无效:

  • CREATE TEMPORARY TABLE tbl_tmp as (SELECT *, @rownum := @rownum+1 as rownum FROM table, (SELECT @rownum := 0) AS r WHERE *filter* ORDER BY *filter*;https://stackoverflow.com/a/1814199/2792350
  • 设置@wanted_rowid =(SELECT rownum FROM tbl_tmp WHERE rid = 348);
  • SELECT * FROM tbl_tmp WHERE rownum BETWEEN @ wanted_rowid-1 AND @ wanted_rowid + 1;
  • 将结果(3条记录)加载到应用程序中并检查边界/边缘情况是否正确。

我仍然想知道如何在1个查询中完成所有...这可能是桌上的三重自我加入,但是谁知道。

欢迎提出意见。感谢。

0 个答案:

没有答案