我正在处理没有插入日期列或唯一ID列的旧数据库表,但是当使用显示最旧到最新的简单SELECT *
进行检查时,插入的自然顺序仍然有效。
我想通过分页获取该数据,但是反转顺序就好像它是ORDER BY date DESC
我考虑过包装查询,为结果行分配一个数字id,然后对结果做ORDER BY
,但是看起来很疯狂。
我忽略了一个更简单的解决方案吗?
我无法将列添加到现有表中,我必须按原样使用它。
感谢您的任何想法!
答案 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子句的情况下返回行的顺序是任意的,并且可能会在没有通知的情况下更改。如果可能的话,最好修改你的表格。