2014-12-20 2 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 

나는 내가 클라이언트 기록에 작업 할 알고 나는 그의 성 (姓)이 모리슨 (그의 이름없이 아이디어)는 "THINK". 첫 번째 "Morrison"레코드를 가져온 다음 원하는 페이지를 찾을 때까지 페이지를 아래로 누르십시오 (또는 페이지 위로 이동). 필자의 예제 6 레코드를 사용하면 가장 먼저 발견 할 수있는 것은 Morrison-Andrew입니다. 나는 아래로 페이지를 눌러서 Morrison-Brendon을 찾을 것이다. 그러나 그것은 내가 원했던 고객이 아닙니다. 그래서 대신 페이지를 눌러 이제 뒤로 이동합니다. Morrison-Brendon부터 Morrison-Andrew까지, 그리고 Morris-David까지. 이제 내가 원하는 기록이있다. 모리스 - 데이빗.

"..... LIKE 'MORRISON %'.... '이 (가)있는 SELECT 문을 사용했다면 Morris-David에게 뒤로 페이지 업 할 수 없었을 것입니다.

이제 클라이언트에게 앱을 다른 방식으로 사용하라고 말할 수는 있지만 이것이 작동하기를 원하는 방식입니다.

나는 DESC 시퀀스로 ORDER BY를 사용하여 놀았지만, 아직 올바른 패턴을 찾지 못했습니다.

제공 할 수있는 조언을 미리 주셔서 감사합니다.

데이비드.

+0

다음 버튼? –

+0

where 절이 인덱스 가능성이 없다 :'concat (성, GivenName, ClientID)'이 쿼리가 자주 실행되는 경우 계산 된 열을 생성하고 인덱싱하거나 사용 가능한 경우 함수 인덱스를 사용할 수 있습니다. – Brandon

+0

일반적으로'concat (성, GivenName, ClientID) <{값} ORDER BY 성씨 desc, 주어진 이름 desc, ClientID desc LIMIT 1' –

답변

0

답변을 찾았습니다. ORDER BY 절의 일부로 CONCAT()을 사용할 수 있다는 것을 알지 못했습니다.

하는 언어에서 당신은 DB를 액세스하려고

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