使用 order by 子句查询以获取下一条记录

Posted

技术标签:

【中文标题】使用 order by 子句查询以获取下一条记录【英文标题】:Query to Fetch next record with order by clause 【发布时间】:2015-03-15 00:47:42 【问题描述】:

我正在研究 mysql。我正在从表中获取记录列表,并从中获取其中一条记录的详细信息。现在我想获取该列表的下一条记录。

我有以下查询

select * from table_name where column3 like %z% order by column2;

查询结果

column1 | column2 | column3
10      | abc1    | zzzz
2       | abc2    | zsdazz
20      | abc3    | sddszz

我选择了 column1 值为 2 的记录。现在我想要一个可以获取下一条记录的查询,在这种情况下,column1 的记录为 20。

注意:我的表中有数千条记录,用户可以选择任何记录然后转到下一条记录。

谢谢。

【问题讨论】:

【参考方案1】:

您可以添加where 子句和子查询:

select *
from table_name
where column3 like '%z%' and
      column2 > (select column2
                 from table_name
                 where column1 = 2 and column3 like '%z%'
                )
order by column2;

注意:如果column1 是唯一的,则不需要'column3 like '%z%'。

【讨论】:

如果 column2 中的值是唯一的,则您的查询可以正常工作。如何处理非唯一值列2。 如果table_name中有重复项,则可以在子查询中使用select max(column2)【参考方案2】:

使用LIMIT 子句

试试这个:

SELECT * 
FROM table_name 
WHERE column3 LIKE %z% 
ORDER BY column2 LIMIT 2, 1;

【讨论】:

你能告诉我如何得到那个神奇的数字2,我可以在limit子句中使用它。 您的查询正在运行,但假设我有 10k 条记录以及如何获取我正在获取的记录号,即包含在限制子句中的行号。 我已经接受了@GordonLinoff 给出的答案。但我仍然想知道如何准备可以放入限制条款的数字。 你问的详细登录信息是什么? 假设我从列 1 值为 55 的结果中选择记录,但在限制子句中,我必须从我之前获取的结果列表中指定该记录的行号。使用什么查询我可以获取该行号?

以上是关于使用 order by 子句查询以获取下一条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用 GROUP BY 和 ORDER BY 子句以降序打印记录

带有 order by 子句的 SQL 查询

在 mysql 中使用 union 和 order by 子句

如何使用Order By和With子句

获取查询集中的最后一条记录

Oracle Order By排序用法详解