这是我的表结构
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
答案 0 :(得分:38)
首先,选择最后20个条目。然后按升序对它们进行排序。您可以在单个查询中轻松执行此操作(使用子查询):
select * from (
select * from your_table order by id desc limit 20
) tmp order by tmp.id asc
答案 1 :(得分:3)
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
答案 2 :(得分:2)
这应该是完成这项工作的最短表达方式:
(select * from your_table order by id desc limit 20) order by id;
答案 3 :(得分:1)
SELECT * FROM
(SELECT * FROM MyTable
ORDER BY ID DESC
LIMIT 20) ilv
ORDER BY ID;
答案 4 :(得分:0)
我真的不明白??
简单的SELECT * FROM MyTable WHERE TopicID = 1 ORDER BY ID ASC LIMIT 20
有什么问题?
顺便说一句,如果你显示最新输入的(即最近的),你需要DESC
(降序),而不是ASC
。此外,使用ID非常不可靠,您应该有一个DATETIME
列,用于存储评论输入的时间。
编辑:binaryLV's answer将使用子查询正确执行此操作。它与我的查询相同,DESC
'd,然后按ID使用。
答案 5 :(得分:0)
您需要添加CommentDate列,每次您使用NOW()
或GETDATE()
插入评论时,请使用此选择:
SELECT Comment FROM MyTable WHERE TopicID=@ID ORDER BY CommentDate DESC, TopicID ASC LIMIT 20
答案 6 :(得分:-1)
假设ID为auto_increment,允许您将其用作伪日期字段,
SELECT * FROM MyTable
ORDER BY ID DESC
LIMIT 20
答案 7 :(得分:-1)
你可以试试这个
SELECT * FROM(
SELECT TOP 20 * FROM TableName
ORDER BY Id DESC
)
Naushad ORDER BY Naushad.Id