在没有 ORDER BY 的情况下反转 MySQL 表的“自然顺序”?

问题描述 投票:0回答:3

我正在处理一个没有插入日期列或唯一 id 列的旧数据库表,但是当使用简单的

SELECT *
显示从最旧到最新的检查时,插入的自然顺序仍然有效。

我想通过分页获取该数据,但颠倒顺序,就好像它是

ORDER BY date DESC

我考虑过包装查询,为结果行分配一个数字 id,然后对结果执行

ORDER BY
,但是哇,这看起来很疯狂。

有我忽略的更简单的解决方案吗?

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

感谢您的任何想法!

mysql sql-order-by
3个回答
4
投票

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

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

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


1
投票

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

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

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

mySQL CREATE VIEW 语法


0
投票

在 Kotlin 中,您可以通过在 Dao 中创建一个适用于

list.reversed()
方法。

如果 items 是您的 Item 表,则在您的 Dao 中执行此操作:

@Query("")
fun itemsInReverseOrder(): List<Item> {
    return itemsInNaturalOrder().reversed()
}
@Query("SELECT * FROM items ")
fun itemsInNaturalOrder(): List<Item>
© www.soinside.com 2019 - 2024. All rights reserved.