programing

오름차순으로 마지막 20개 순서 선택 - PHP/MySQL

padding 2023. 10. 15. 17:03
반응형

오름차순으로 마지막 20개 순서 선택 - PHP/MySQL

이것이 제 테이블 구조입니다.

MyTable
ID[P.K][auto increment]   TopicID   UID   Comment

이제 토픽에 대한 마지막 20개의 코멘트를 얻고 싶습니다.ID는 오름차순으로 정렬해야 합니다!

[Facebook 기본으로 마지막 20개 댓글만 보여주는 것처럼]

최적화된 버전을 찾고 있습니다. 2/3 쿼리와 php 정렬 배열로 이 작업을 수행할 수 있지만 더 나은 대안을 찾고 있습니다.

Sample Result with data

MyTable  
ID TopicID UID Comment  
1  1       10  AAAA   
2  1       11  BBBB  
3  1       10  CCCC  
4  1       10  dddd   
5  1       11  EEEE  
6  1       10  FFFF

TopicID에 대한 마지막 3개의 결과를 얻고 싶은데, 결과는 다음과 같습니다.

4  1       10  dddd   
5  1       11  EEEE  
6  1       10  FFFF

아닌

6  1       10  FFFF  
5  1       11  EEEE  
4  1       10  dddd  

먼저 마지막 20개 항목을 선택합니다.그런 다음 오름차순으로 정렬합니다.하위 쿼리를 사용하여 단일 쿼리에서 쉽게 이 작업을 수행할 수 있습니다.

select * from (
    select * from your_table order by id desc limit 20
) tmp order by tmp.id asc
SELECT  *
FROM    (
        SELECT  *
        FROM    mytable
        WHERE   topicid = $mytopicid
        ORDER BY
                id DESC
        LIMIT 20
        ) q
ORDER BY
        id

아니면, 더 효율적으로,

(
SELECT  *
FROM    mytable
WHERE   topicid = $mytopicid
ORDER BY
        id DESC
LIMIT 20
)
ORDER BY
        id

이는 작업을 수행하기 위한 가장 짧은 표현이어야 합니다.

    (select * from your_table order by id desc limit 20) order by id; 
 SELECT * FROM
   (SELECT * FROM MyTable
   ORDER BY ID DESC
   LIMIT 20) ilv
 ORDER BY ID;

잘 모르겠어요?

간단한 게 뭐가 문제입니까?SELECT * FROM MyTable WHERE TopicID = 1 ORDER BY ID ASC LIMIT 20?

그런데, 최근에 입력한 것들(즉, 가장 최근에 입력한 것들)을 보여준다면, 당신은 다음과 같이DESC(하강), 아님ASC. 또한 ID를 사용하는 것은 매우 신뢰할 수 없기 때문에, 당신은 다음과 같은 정보를 가지고 있어야 합니다.DATETIME주석이 입력된 시점을 저장하는 열입니다.

EDIT: 이진법LV의 답변은 하위 쿼리를 사용하여 올바르게 수행됩니다.저랑 똑같은 질문인데요DESC'd', 그리고 ID로 정렬했습니다.

주석 날짜 열을 추가해야 하며 주석을 삽입할 때마다 사용합니다.NOW()아니면GETDATE()다음 선택 항목을 사용합니다.

SELECT Comment FROM MyTable WHERE TopicID=@ID ORDER BY CommentDate DESC, TopicID ASC LIMIT 20

ID를 auto_incrementation이라 가정하면 유사 날짜 필드로 사용할 수 있습니다.

SELECT * FROM MyTable
  ORDER BY ID DESC
  LIMIT 20

이거 드셔보세요.

SELECT * FROM(
    SELECT TOP 20 * FROM TableName
    ORDER BY Id DESC
)
Naushad ORDER BY Naushad.Id

언급URL : https://stackoverflow.com/questions/5912770/select-last-20-order-by-ascending-php-mysql

반응형