2012-07-27 8 views
0

Facebook과 같은 뉴스 티커 애플리케이션의 경우 스크롤하면 더 오래된 뉴스가 표시됩니다. 이제는 뉴스가 테이블에 삽입 될 것이므로 일반 선택은 항상 이전 레코드를 검색하는 반면, 여기에서는 역순으로 검색합니다. 나는 그것이 끝나는 방식으로 사용자가 끝까지 스크롤 할 때 FB가 현재 티커에있는 마지막 뉴스 ID의 ID를 가진 Ajax 요청을 보낸다고 가정합니다 (Firebug에서 확실히 식별 할 수 없었고, FB는로드를 보냈습니다 PHP는 DB를 쿼리하고 시간 열에 따라 결과 집합을 뒤집은 다음 수신 된 ID가있는 레코드 다음에 오는 5 개의 레코드를 추출합니다. 이제 그러한 테이블은 거대합니다. 따라서 테이블을 자주 넘겨 주면 확실히 DB에 많은 피해를 입 힙니다. 따라서 뒤집기없이 이것을 달성 할 수있는 방법이 있습니까?역순으로 레코드를 검색하는 방법은 무엇입니까?

+2

내가 시간을 정렬하는 것은 갈 길이라고 생각합니다. mysql을 사용하여 원래 삽입 시간 순서대로 레코드를 항상 반환 할 수 있는지 여부는 확실하지 않습니다. 또한, mysql을 사용하면 결과를 정렬하는 것이 PHP를 처리하는 것보다 훨씬 빠르지 만 벤치 마크를 통해 쉽게 찾을 수 있다고 생각합니다. – octern

+1

DB에서 주어진 레코드 ID 앞에 5 개의 레코드를 추출한 다음, 시간을 기준으로 내림차순으로 정렬합니까? – JAB

+0

** 주어진 행 ID **가있는 레코드보다 먼저 DB에 5 개의 레코드를 추출하는 방법은 무엇입니까? – SexyBeast

답변

3

쿼리에 ORDER BY 변수를 지정하지 않으면 MySQL은 삽입 순서대로 레코드를 반환하지 않을 수 있습니다. 자세한 내용은 this answer을 참조하십시오. 가장 최근의 행을 가져 오려면 삽입 시간 열이 있어야하며 정렬이 필요합니다.

당신이 time desc에 정렬하는 경우, 당신은 처음 5 개 기록을 요청하기 위해 보통 LIMIT 절을 사용할 수 있습니다 (즉, 가장 최근의 5 등), 또는 특정 ID 이후 가장 최근의 5,

+0

오, 나는 몰랐다. 나는 MySQL이 항상 삽입 된 순서대로 행을 리턴한다고 생각했다. 물론 다른 컬럼의 클러스터 된 인덱스가 그렇지 않은 경우는 예외였다. – SexyBeast

+0

+1. @Cupidvogel : MySQL은'ORDER BY' 절에 명시된 순서를 제외하고는 특정 순서로 행을 반환한다는 보장은 전혀 없습니다. – spencer7593

1

예, 매우 추상적으로 말하고 있습니다. 인덱스 된 컬렉션에 역순으로 액세스하려는 경우.

$collection = array(); // Filled through request to server 
.... 
for ($i = sizeof($collection)-1; $i >= 0; $i--) { 
    echo $collection[$i] 
    .... // execute some action based on access to 
}  

즉, 마지막 색인에서 배열에 액세스 할 수있는 이유가 없습니다.

1

가장 오래된 것을 먼저 얻으려면 SQL 문에 order by을 지정하십시오. 그리고 last_id

관련 문제