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

Mysql 通过SQL读取下一条/上一条记录,mysql,select,next,Mysql,Select,Next,我有一个简单的客户端数据库(使用MySQL)。该应用程序一次读取一条记录。我希望能够单击按钮阅读下一页或上一页 我没有找到的记录集。一次只能找到一条记录 记录的唯一性由姓氏+名字+客户ID的密钥保证 为了阅读下一条记录,我做了以下操作(效果很好)。这假设我已经读过一条记录,所以我知道它的当前姓氏+givenname+clientid,所以获取下一条记录只需选择一条“大于”当前记录的记录(代码如下所示) 如果我有两张唱片“David Morris”和“David Morrison”,那么上面的下一

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

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

记录的唯一性由姓氏+名字+客户ID的密钥保证

为了阅读下一条记录,我做了以下操作(效果很好)。这假设我已经读过一条记录,所以我知道它的当前姓氏+givenname+clientid,所以获取下一条记录只需选择一条“大于”当前记录的记录(代码如下所示)

如果我有两张唱片“David Morris”和“David Morrison”,那么上面的下一张唱片逻辑就可以了。但是我该如何阅读之前的记录呢

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

Morris, Alan
Morris, Barry
Morris, Charlie
Morris, David
Morrison, Andrew
Morrison, Brendon
我知道我想处理客户记录,我“认为”他的姓是莫里森(不知道他的名字)。我想打开第一张“Morrison”唱片,然后按page down(或page up),直到找到我想要的那张。使用我的示例6记录,我会找到的第一个是Morrison Andrew。我可以按page向下,我会找到Morrison Brendon。但那不是我想要的客户。所以我改为按page up,现在后退。从Morrison Brendon到Morrison Andrew再到Morris David。现在我有了我想要的唱片。莫里斯·大卫

如果我用了一个select语句“……比如‘MORRISON%”……”,那么我就不能向后翻页找到Morris David了

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

我已经尝试过使用orderby和DESC序列,但还没有找到正确的模式

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


大卫。

我找到了答案。我不知道您可以使用CONCAT()作为orderby子句的一部分

下一个按钮

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
select*从concat(姓氏,GivenName,ClientID)按concat(姓氏,GivenName,ClientID)顺序描述限制1的客户端

您试图使用哪种语言访问db?where子句不太可能是可索引的:
where concat(姓氏,GivenName,ClientID)
如果此查询经常运行,您可能希望生成一个计算列并对其进行索引(或使用函数索引,如果可用)。通常它将为
where concat(姓氏,GivenName,ClientID)<{value}按姓氏desc、GivenName desc、ClientID desc LIMIT 1排序这似乎是使用数据库的一种奇怪方式。一般来说,我认为您只需要从[某些条件]所在的客户端使用select*按姓氏、givenname、客户id或诸如此类的顺序排列。你能解释一下更大的上下文吗?然后也许我们能给你一个更好的答案。还有为什么不使用为什么你没有唯一的id列呢?
select * from Clients where concat(Surname,GivenName,ClientID) < '" & SearchKey & "' ORDER BY concat(Surname, GivenName, ClientID) DESC LIMIT 1