我有一个简单的客户端数据库(使用 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/