SQL - 在给定特定WHERE子句的情况下查找下一行和上一行

bob*_*byh 9 mysql sql

我有一个名为bb_posts的MySQL表,由bbPress论坛使用.它有一个名为topid_id的自动增量字段和另一个名为topic_poster的字段.

我正在尝试编写一个找到"同一作者的下一篇文章"的函数.因此,例如,假设用户位于显示主题123的特定页面上.如果您执行SQL查询:

SELECT *
FROM `bb_topics`
WHERE `topic_poster` = 5
ORDER BY `topic_id` ASC
Run Code Online (Sandbox Code Playgroud)

这可能会返回以下行:

topic_id    topic_poster
6           5
50          5
123         5
199         5
2039        5

我想做的是写一个返回这两行的SQL查询:

topic_id    topic_poster
50          5
199         5

这将是具有topic_id为123的行的PRIOR行,以及该行的AFTER行.

如果在一个查询中执行此操作太难了,那么将其分解为两个查询肯定是可以的...

我想避免做整个SQL查询("SELECT*FROM bb_topicsWHERE topic_poster= 5")并循环遍历结果,因为结果集有时很大.

这可能吗?:-)

cdo*_*ner 14

下一个:

SELECT * FROM `bb_topics` 
      WHERE `topic_id` = 
      (select min(`topic_id`) FROM `bb_topics` where `topic_id` > 123
         and `topic_poster` = 5)
Run Code Online (Sandbox Code Playgroud)

前一个:

SELECT * FROM `bb_topics` 
      WHERE `topic_id` = 
      (select max(`topic_id`) FROM `bb_topics` where `topic_id` < 123
         and `topic_poster` = 5)
Run Code Online (Sandbox Code Playgroud)

都:

SELECT * FROM `bb_topics` 
      WHERE `topic_id` = 
      (select min(`topic_id`) FROM `bb_topics` where `topic_id` > 123
                     and `topic_poster` = 5)
      or `topic_id` = 
      (select max(`topic_id`) FROM `bb_topics` where `topic_id` < 123
                        and `topic_poster` = 5)
Run Code Online (Sandbox Code Playgroud)