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

时间:2014-12-20 08:53:31

标签: mysql select next

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

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

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

要阅读下一条记录,我会执行以下操作(工作正常)。这假设我已经读过一条记录,所以我知道它当前的姓氏+给定名字+ clientid所以获取NEXT记录只是选择一个记录是"大于"当前的一个(代码如下所示)。

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

如果我有两个记录" David Morris"和#34; David Morrison"上面的NEXT记录逻辑工作正常。但是我如何阅读以前的记录呢?

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

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

我知道我想在客户记录上工作而且我想要#34;思考"他的姓是莫里森(不知道他的名字)。我想提出第一个" Morrison"记录,然后按下页面(或向上翻页),直到找到我想要的那个。用我的例子6个记录,我找到的第一个是莫里森 - 安德鲁。我可以按下页面,我会找到Morrison-Brendon。但那不是我想要的客户。所以我向上翻页然后向后退。从Morrison-Brendon到Morrison-Andrew再到Morris-David。现在我有我想要的记录。莫里斯-大卫。

如果我使用了一个选择语句" ..... LIKE' MORRISON%' ...."然后我就不能向后翻页去找莫里斯 - 大卫了。

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

我使用ORDER BY和DESC序列玩过,但我还没有找到合适的模式。

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

大卫。

1 个答案:

答案 0 :(得分:0)

我找到了答案。我没有意识到你可以使用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