2014-12-20 70 views
0

我有一個簡單的客戶端數據庫(使用MySQL)。該應用程序一次只能讀取一條記錄。我希望能夠點擊一個按鈕來閱讀下一個或閱讀前一個。通過SQL閱讀下一條/上一條記錄

我沒有找到記錄的記錄集。一次只能找到一條記錄。

這些記錄具有用SURNAME + FIRSTNAME + CLIENTID鍵保證的唯一性。

要閱讀下一個記錄,我做下面的(它工作正常)。假設我已經讀過一條記錄,所以我知道它的當前姓氏+ givenname + 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」記錄,然後按下頁面(或翻頁),直到找到我想要的。使用我的例子6記錄,我會找到的第一個是Morrison-Andrew。我可以按下頁面,我會找到Morrison-Brendon。但那不是我想要的客戶。所以我按了頁面,而現在倒退。從莫里森 - 布倫登到莫里森 - 安德魯,再到莫里斯 - 大衛。現在我有我想要的紀錄。莫里斯 - 大衛。

如果我使用了「..... LIKE'MORRISON%....」的選擇語句,那麼我就不能夠向後翻頁去Morris-David。

現在我總是可以告訴客戶端以不同的方式使用應用程序,但這是他希望它工作的方式。

我玩過使用ORDER BY與DESC序列,但我還沒有找到正確的模式使用尚未。

非常感謝您提供任何建議。

David。

+0

在哪種語言您試圖訪問數據庫? –

+0

這個where子句不可能是可索引的:'where concat(Surname,GivenName,ClientID)'如果這個查詢經常運行,您可能想要生成一個計算列並對其進行索引(或者使用函數索引(如果可用))。 – Brandon

+0

通常它會作爲'where concat(Surname,GivenName,ClientID)<{value} ORDER BY Surname desc,GivenName desc,ClientID desc LIMIT 1' –

回答

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 
相關問題