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

标签 sql mysql select

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

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

记录的唯一性通过 SURNAME+FIRSTNAME+CLIENTID 键来保证。

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

"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”记录,然后按向下翻页(或向上翻页),直到找到我想要的记录。使用我的示例 6 条记录,我找到的第一个记录是 Morrison-Andrew。我可以按下翻页键,我会找到莫里森-布伦登。但这不是我想要的客户。所以我按向上翻页键,然后向后退。从莫里森-布伦登,到莫里森-安德鲁,再到莫里森-大卫。现在我有了我想要的记录。莫里斯-大卫。

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

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

我尝试过使用 ORDER BY 和 DESC 序列,但我还没有找到正确的模式。

最佳答案

我找到了答案。我没有意识到您可以使用 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 - 通过 SQL 读取下一条/上一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27578602/

相关文章:

MySQL 在选择中选择

Swift 中的 iOS 简单 SQLite Select 语句

javascript - 如何在加载的页面上创建多个 select-2

sql - @@IDENTITY、SCOPE_IDENTITY()、OUTPUT 和其他检索最后身份的方法

mysql - 如何通过sql查询对条件进行排序

mysql - SQL 拆分逗号分隔行

mysql - 用于对一个查询中的时间段内的事件进行计数的 SQL 查询

mysql - 在 Mysql 中添加带有 select 语句的 "total sum"行

MySQL JSON 数组用于 "IN"子句?

php - 使用 %C3 特殊字符时数据输入 mySQL 被截断