2010-01-08 5 views
1

나는 쉽게 웹 기반 채팅을하고 있으므로 (예를 들어) MySQL 데이터베이스에서 30 개의 최신 메시지를 받아야합니다. 그게 아무런 문제가 없지만 데이터를 어떻게하면 아래쪽으로 가져갈 수 있습니까? 가장 오래된 메시지가 첫 번째 메시지입니다. 나는 추가 된 시간으로 최신의 30 레코드를 가져 가야한다.MySQL 음수 한계?

편집 : 답변 주셔서 감사합니다,하지만 ...

ORDER 추가 DESC의 LIMIT 30

BY를 제공합니다

15, 14, 13, 12, 11

... 및 필요 :

(11), 12, 13, 14, 15

은 내가 서브 쿼리를 사용하여 얻을 수 있습니다 알고 있습니다. 더 좋은 방법이 있습니까?

+0

@ayeo : 답 중 하나라도 문제가 해결되면 수락해야합니다. 그렇지 않으면 질문을 편집하여 원하는 것에 대한 자세한 정보를 제공 할 수 있습니다. –

답변

4

위에서 언급 한 것처럼 단순한 "desc"정렬은 최신 메시지가 아니라 가장 오래된 메시지 30 개를 가져옵니다 (올바른 순서 임에도 불구하고).

은 실제로 당신이 필요로하는 모든입니다 : 나는 희망을 추가 오름차순

에 의해

(추가 DESC 한계 (30)에 의해 테이블 ​​순서에서 안부를 선택) 순서이 도움이됩니다.

0

각 메시지의 타임 스탬프를 보유하고 MessageTimestamp라는 열이 가정 :

SELECT [...] FROM MyChatTable ORDER BY MessageTimestamp DESC LIMIT 30 
5

내가 서브 쿼리없이 할 수있는 방법이 표시되지 않습니다, 그러나 그것은 문제가되지 않습니다. 외부 ORDER BY은 30 개의 행만 정렬하므로 성능 손실은 무시할 수 있습니다.

SELECT * FROM 
(
    SELECT * 
    FROM posts 
    ORDER BY post_time DESC 
    LIMIT 0, 30 
) x 
ORDER BY post_time ASC 

물론 대신 *의 실제 열 이름을 사용해야합니다.

+0

@James Goodwin : 나는 당신이 의미하는 것을 얻지 못할 것이라고 생각합니다. op는'가장 오래된 메아 저지가 첫 번째 메시지 '인'30 개의 최신 메시지'를 원한다. 비록 더 나은 솔루션을 게시 할 수 있지만 자유롭게 :) –

+0

나는 문제가 실제보다 간단하다고 생각했는데, 서브 쿼리를 사용하는 것이 이것을 달성하는 유일한 방법 인 것 같다. –

+0

@James Goodwin : 환영합니다 :) –