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

Sou*_*rav 28 php mysql

这是我的表结构

MyTable
ID[P.K][auto increment]   TopicID   UID   Comment
Run Code Online (Sandbox Code Playgroud)

现在我想得到一个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
Run Code Online (Sandbox Code Playgroud)

我想获得TopicID的最后3个结果,结果应该是

4  1       10  dddd   
5  1       11  EEEE  
6  1       10  FFFF
Run Code Online (Sandbox Code Playgroud)

并不是

6  1       10  FFFF  
5  1       11  EEEE  
4  1       10  dddd  
Run Code Online (Sandbox Code Playgroud)

bin*_*yLV 41

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

select * from (
    select * from your_table order by id desc limit 20
) tmp order by tmp.id asc
Run Code Online (Sandbox Code Playgroud)

  • 它可以更容易地完成:`(通过id desc limit 20从your_table命令中选择*)按id asc排序;`像往常一样,你可以省略"asc". (18认同)
  • @eykanel - 废话.将数据映射到PHP中并将其排序到数据库之外是浪费且无效的.这也浪费了程序员的时间 (2认同)

Qua*_*noi 5

SELECT  *
FROM    (
        SELECT  *
        FROM    mytable
        WHERE   topicid = $mytopicid
        ORDER BY
                id DESC
        LIMIT 20
        ) q
ORDER BY
        id
Run Code Online (Sandbox Code Playgroud)

或者,更有效地,

(
SELECT  *
FROM    mytable
WHERE   topicid = $mytopicid
ORDER BY
        id DESC
LIMIT 20
)
ORDER BY
        id
Run Code Online (Sandbox Code Playgroud)