在不使用ORDER BY的情况下反转MySQL表的“自然顺序”?

时间:2010-09-23 14:03:29

标签: mysql sql-order-by

我正在处理没有插入日期列或唯一ID列的旧数据库表,但是当使用显示最旧到最新的简单SELECT *进行检查时,插入的自然顺序仍然有效。

我想通过分页获取该数据,但是反转顺序就好像它是ORDER BY date DESC

我考虑过包装查询,为结果行分配一个数字id,然后对结果做ORDER BY,但是看起来很疯狂。

我忽略了一个更简单的解决方案吗?

我无法将列添加到现有表中,我必须按原样使用它。

感谢您的任何想法!

2 个答案:

答案 0 :(得分:3)

在查询中使用@rownum对每一行进行编号,然后按@rownum desc进行排序。这是an example

select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;

最后,请注意不建议依赖长期退回的当前订单。

答案 1 :(得分:1)

如果您正在编写应用程序来处理数据,另一种方法可能是运行当前查询,然后从最后一个到第一个遍历返回的记录。

如果您有太多记录,那么您可能希望使用视图。这是一个Database对象,可用于组合来自不同tabl的数据,或呈现单个表的修改视图等。在这种情况下,您可以尝试创建表的视图并添加生成的ID列。然后,您可以根据已添加的新列对此视图排序运行SELECT语句。

但请注意上面另一张海报的建议:在没有ORDER BY子句的情况下返回行的顺序是任意的,并且可能会在没有通知的情况下更改。如果可能的话,最好修改你的表格。

mySQL CREATE VIEW syntax