通过 SQL 读取下一条/上一条记录

Posted

技术标签:

【中文标题】通过 SQL 读取下一条/上一条记录【英文标题】:Read Next/Previous record via SQL 【发布时间】:2014-12-20 08:53:31 【问题描述】:

我有一个简单的客户端数据库(使用 mysql)。该应用程序一次读取一条记录。我希望能够单击按钮阅读下一个或阅读上一个。

我没有找到的记录的记录集。一次只能找到一条记录。

使用 SURNAME+FIRSTNAME+CLIENTID 键保证记录的唯一性。

要阅读下一条记录,我执行以下操作(效果很好)。这假设我已经阅读了一条记录,所以我知道它的当前姓氏+给定名称+clientid,因此获取 NEXT 记录只是选择一个“大于”当前记录的记录(代码如下所示)。

"select * from Clients where concat(Surname,GivenName,ClientID) > '" & SearchKey & "' ORDER BY Surname, GivenName, ClientID LIMIT 1"

如果我有两条记录“David Morris”和“David Morrison”,则上面的 NEXT 记录逻辑可以正常工作。但是我该如何阅读之前的记录呢?

示例:假设我在数据库中有以下 6 条记录。

Morris, Alan
Morris, Barry
Morris, Charlie
Morris, David
Morrison, Andrew
Morrison, Brendon

我知道我想处理客户记录,我“认为”他的姓是 Morrison(不知道他的名字)。我想调出第一条“Morrison”唱片,然后按向下翻页(或向上翻页),直到找到我想要的唱片。使用我的示例 6 记录,我会找到的第一个是 Morrison-Andrew。我可以向下按页面,我会找到 Morrison-Brendon。但这不是我想要的客户。所以我改为向上翻页,现在向后退。从莫里森-布伦登,到莫里森-安德鲁,再到莫里森-大卫。现在我有了我想要的唱片。莫里斯-大卫。

如果我使用带有“.....LIKE 'MORRISON%'....”的选择语句,那么我将无法向后翻页以找到 Morris-David。

现在我总是可以告诉客户以不同的方式使用应用程序,但这是他希望它工作的方式。

我已经尝试过使用带有 DESC 序列的 ORDER BY,但我还没有找到合适的模式。

提前感谢您提供的任何建议。

大卫。

【问题讨论】:

您尝试使用哪种语言访问数据库? 此 where 子句不太可能可索引:where concat(Surname,GivenName,ClientID) 如果此查询经常运行,您可能希望生成计算列并为其编制索引(或使用函数索引,如果可用)。 通常是where concat(Surname,GivenName,ClientID) &lt; value ORDER BY Surname desc, GivenName desc, ClientID desc LIMIT 1 这似乎是一种奇怪的数据库使用方式。一般来说,我认为您只想使用 select * from clients where [some condition] order by surname, givenname, client_id 或类似的东西。你能解释一下更大的背景吗?那么也许我们可以给你一个更好的答案。还有为什么不使用 <.> 为什么没有唯一的 id 列? 【参考方案1】:

我找到了答案。我没有意识到您可以使用 CONCAT() 作为 ORDER BY 子句的一部分。

下一步按钮

select * from Clients where concat(Surname,GivenName,ClientID) > '" & SearchKey & "' ORDER BY concat(Surname, GivenName, ClientID) LIMIT 1

上一个按钮

select * from Clients where concat(Surname,GivenName,ClientID) < '" & SearchKey & "' ORDER BY concat(Surname, GivenName, ClientID) DESC LIMIT 1

【讨论】:

以上是关于通过 SQL 读取下一条/上一条记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL实现根据当前ID读取上一条和下一条记录

平台记录部件上一条/下一条方法

SQL如何获取上一条..下一条..首尾记录...

sql查询上一条记录和下一条记录

在 CICS 中浏览 KSDS 时无法读取下一条记录

如何获取SQL查询当前数据上一条和下一条的记录?