按升序选择最后20个订单-PHP/MySQL
这是我的桌子结构按升序选择最后20个订单-PHP/MySQL,php,mysql,Php,Mysql,这是我的桌子结构 MyTable ID[P.K][auto increment] TopicID UID Comment 现在我想得到一个TopicID的最后20条评论,但它应该按升序排序 [就像Facebook默认只显示最后20条评论] 我正在寻找一个优化的版本,我可以用2/3查询和php排序数组来实现这一点,但寻找一些更好的替代方案 带数据的样本结果 我想得到TopicID的最后3个结果,结果应该是 4 1 10 dddd 5 1 11 E
MyTable
ID[P.K][auto increment] TopicID UID Comment
现在我想得到一个TopicID的最后20条评论,但它应该按升序排序
[就像Facebook默认只显示最后20条评论]
我正在寻找一个优化的版本,我可以用2/3查询和php排序数组来实现这一点,但寻找一些更好的替代方案
带数据的样本结果
我想得到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
我真的不明白 从MyTable中选择一个简单的SELECT*,其中TopicID=1 ORDER BY ID ASC LIMIT 20有什么问题 顺便说一句,如果您显示的是最新输入的,即最近输入的,您将需要DESC降序,而不是ASC。另外,使用ID是非常不可靠的,您应该有一个DATETIME列来存储输入注释的时间
编辑:将使用子查询正确执行此操作。它与我的查询相同,DESC'd,然后按ID重新调用。假设ID是自动递增的,这将允许您将其用作伪日期字段
SELECT * FROM MyTable
ORDER BY ID DESC
LIMIT 20
您需要添加CommentDate列,每次插入注释时使用NOW或GETDATE,然后使用以下选择:
SELECT Comment FROM MyTable WHERE TopicID=@ID ORDER BY CommentDate DESC, TopicID ASC LIMIT 20
首先,选择最后20个条目。然后按升序对它们进行排序。您可以使用子查询在单个查询中轻松完成此操作:
select * from (
select * from your_table order by id desc limit 20
) tmp order by tmp.id asc
或者更有效地说
(
SELECT *
FROM mytable
WHERE topicid = $mytopicid
ORDER BY
id DESC
LIMIT 20
)
ORDER BY
id
你可以试试这个
SELECT * FROM(
SELECT TOP 20 * FROM TableName
ORDER BY Id DESC
)
Naushad ORDER BY Naushad.Id
这应该是执行作业的最短表达式:
(select * from your_table order by id desc limit 20) order by id;
你想按哪个字段排序?我想按ID ascendingHe需要最后20个条目,按asc排序。比如5,6,7,而不是1,2,3,4,5,6,7中的7,6,5。是的,但他不需要第一个条目。@binaryLV你是什么意思,看看我的查询now@Danpe,我的意思是他需要选择CommentDate最大的最后一个条目。顺便说一下,如果他使用timestamp列存储日期,他可以将其默认值设置为current_timestamp。不需要手动填写now或getdate。我喜欢按id排序的想法,这是我通常做的。不过,此查询的结果不会按作者的需要进行排序。此处不需要使用子查询。子查询非常昂贵,而且几乎没有必要。通过只运行子查询,然后在PHP端以相反的顺序打印它们,可以获得相同的结果。当在可选字段列表中使用select id、name、subquery作为表中的内容或在where子句中使用select id、name from where foo=subquery时,它们确实很昂贵,但可以将它们用作数据源。@eykanel-胡说八道。将数据映射到PHP中并在数据库外对其进行排序既浪费又高效。这也是对程序员时间的浪费。这可以做得容易得多:从表中选择*按id描述顺序限制20按id asc顺序;和往常一样,您可以省略asc。@谢谢:-问题被标记为MySQL,您的脚本适用于SQL Server。
SELECT * FROM
(SELECT * FROM MyTable
ORDER BY ID DESC
LIMIT 20) ilv
ORDER BY ID;
SELECT * FROM(
SELECT TOP 20 * FROM TableName
ORDER BY Id DESC
)
Naushad ORDER BY Naushad.Id
(select * from your_table order by id desc limit 20) order by id;