通过升序选择最后20个顺序 - PHP / MySQL

2022-08-30 14:34:26

这是我的表结构

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

现在我想得到一个TopicID的最后20条评论,但它应该按升序排序!

[就像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  

答案 1

首先,选择最后 20 个条目。然后按升序对它们进行排序。您可以在单个查询中轻松执行此操作(使用子查询):

select * from (
    select * from your_table order by id desc limit 20
) tmp order by tmp.id asc

答案 2
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

推荐