2009-06-30 4 views
0

둘러 보았고 사이트에서 찾을 수있는 유일한 질문/답변은 MySQL의 ID로 정렬하는 것과 관련이 있습니다. 다음과 같은 질문 : stackoverflow.com/questions/645102stackoverflow.com/questions/169233MySQL에서 ID별로 정렬되지 않은 결과에서 이전 및 다음 레코드를 찾는 가장 빠른 방법은 무엇입니까?

ID가 아닌 다른 열로 정렬 할 때 이전 및 다음 행을 찾으려고합니다. 예를 들어 결과 중 하나에

이제
SELECT id, first_name, last_name 
FROM user 
WHERE last_name LIKE 'm%' 
    AND active_flag = 1 
ORDER BY last_name, first_name 

사용자가 클릭을하고 그 사용자에 대한 상세 페이지로 보내집니다 :

은 내가 먼저 사용자의 목록을 얻으려면이 쿼리를 실행합니다. 해당 페이지에서 이전 및 다음 링크를 표시하려고합니다.

내가 가진 동일한 생각은 동일한 쿼리를 수행하는 것이었지만, 3 행, 1 이전, 현재 1 및 1 후에 제한했지만 그 결과 목록에서 현재 사용자가 현재 위치를 알지 못한다는 사실을 깨달았습니다. 입니다.

다른 모든 아이디어는 전체 결과 집합을 선택하고 배열의 키를 가져온 다음 이전 및 다음 배열을 찾습니다.

저는 MySQL과 PHP를 사용하고 있습니다.

답변

1

"보다 작음"및 "보다 큼"연산자는 문자열 필드에서도 작동합니다. 현재 레코드를 가져옵니다. 그런 다음을 수행하십시오 당신이 (last_name, first_name)에 클러스터 된 인덱스가있는 경우

SELECT id, first_name, last_name 
FROM user 
WHERE last_name >= $current_lastname 
    AND first_name > $current_firstname 
    AND active_flag = 1 
ORDER BY last_name, first_name 

이 쿼리는 빠르게해야한다. 물론, MySQL을 사용할 때 보장 할 것이 없기 때문에 쿼리에 EXPLAIN을 실행해야합니다.

관련 문제