我正在处理一个没有插入日期列或唯一 id 列的旧数据库表,但是当使用简单的
SELECT *
显示从最旧到最新的检查时,插入的自然顺序仍然有效。
我想通过分页获取该数据,但颠倒顺序,就好像它是
ORDER BY date DESC
我考虑过包装查询,为结果行分配一个数字 id,然后对结果执行
ORDER BY
,但是哇,这看起来很疯狂。
有我忽略的更简单的解决方案吗?
我无法向现有表添加列,我必须按原样使用它。
感谢您的任何想法!
在查询中使用@rownum对每行进行编号,然后按@rownum desc进行排序。这是一个例子。
select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;
最后,请注意,不建议长期依赖当前订单返回。
如果您正在编写一个应用程序来处理数据,另一种方法可能是运行当前查询,然后从最后一个到第一个迭代返回的记录。
如果您有太多记录,那么您可能希望改用视图。这是一个数据库对象,可用于组合来自不同表的数据,或呈现单个表的修改视图等。在这种情况下,您可以尝试创建表的视图并添加生成的 ID 列。然后,您可以根据您添加的新列对该视图排序运行 SELECT 语句。
但是请注意上面另一张海报的建议:不带 ORDER BY 子句返回行的顺序是任意的,并且可能会更改,恕不另行通知。如果可能的话最好修改一下你的表格。
在 Kotlin 中,您可以通过在 Dao 中创建一个适用于
list.reversed()
方法。
如果 items 是您的 Item 表,则在您的 Dao 中执行此操作:
@Query("")
fun itemsInReverseOrder(): List<Item> {
return itemsInNaturalOrder().reversed()
}
@Query("SELECT * FROM items ")
fun itemsInNaturalOrder(): List<Item>