我有一個簡單的客戶端數據庫(使用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。
在哪種語言您試圖訪問數據庫? –
這個where子句不可能是可索引的:'where concat(Surname,GivenName,ClientID)'如果這個查詢經常運行,您可能想要生成一個計算列並對其進行索引(或者使用函數索引(如果可用))。 – Brandon
通常它會作爲'where concat(Surname,GivenName,ClientID)<{value} ORDER BY Surname desc,GivenName desc,ClientID desc LIMIT 1' –