2012-04-17 4 views
1
//get the messages from the database 
$messagesID_query = mysql_query("SELECT 
            messageID, 
            posterID, 
            messageTime, 
            message 
           FROM 
            chat_messages 
           ORDER BY 
            messageTime DESC 
           LIMIT 
            20"); 

위의 mysql_query는 테이블에서 최신 항목 20 개를 반환합니다. 그러나 필자는 행을 페치하기 전에 리소스를 반대로 변환해야합니다.mysql 리소스를 역으로 변경

현재 2 루프를 실행합니다. 1 - 1은 PHP 배열 2에서 모든 결과를 가져오고 한 번은 역순으로 인쇄 할 배열을 처리합니다.

나는이 작동 방식을 최적화하려고 노력하고 있습니다 ... PHP에서 배열을 뒤집을 필요가 없도록 행을 가져 오기 전에 mysql 리소스를 되돌릴 수 있습니까?

또는 역순으로 말한 행을 반환하는 쿼리를 다시 작성하는 방법이 있습니까?하지만 위의 경우와 마찬가지로 최신 20 개의 결과가 여전히 발생합니까?

답변

4

이 작업은 쿼리에서 수행하는 것이 가장 좋습니다. 전체 내용을 하위 쿼리로 묶고 다시 순서대로 오름차순으로 messageTime으로 재정렬하십시오. 이 화려한 즉 당신의 20

SELECT * FROM 
(
    SELECT 
    messageID, 
    posterID, 
    messageTime, 
    message 
    FROM 
    chat_messages 
    /* Subquery is used to get the most recent 20 by messageTime */ 
    ORDER BY messageTime DESC 
    LIMIT 20 
) subq 
/* Reorder the result of the subquery to put them back into ascending order */ 
ORDER BY messageTime ASC 
+0

보다 더 큰 행 집합에 뒤로 행을 가져 오기 위해 mysql_data_seek()에 호출 한 무리의 반복을 통해 데이터베이스 서버에 상당한 CPU 자원을 절약 할 수있다! 하위 쿼리에 대해 몰랐습니다. 해결되었습니다! – John

관련 문제