<分区>
我注意到下面的查询
SELECT * FROM 'mytable' ORDER BY 'myfield'
生成一个与
完全不同的排序表SELECT id FROM 'mytable' ORDER BY 'myfield'
我排序所依据的字段是一个日期字段,并且对于 50% 的记录,该值为空。此外,如果在我的 SELECT 子句中我命名每个字段而不是依赖 * 它实现与上面第二个查询相同的顺序。
谁能告诉我为什么会这样以及我可以做些什么来获得一致的顺序?
<分区>
我注意到下面的查询
SELECT * FROM 'mytable' ORDER BY 'myfield'
生成一个与
完全不同的排序表SELECT id FROM 'mytable' ORDER BY 'myfield'
我排序所依据的字段是一个日期字段,并且对于 50% 的记录,该值为空。此外,如果在我的 SELECT 子句中我命名每个字段而不是依赖 * 它实现与上面第二个查询相同的顺序。
谁能告诉我为什么会这样以及我可以做些什么来获得一致的顺序?
最佳答案
如果没有第二级排序,空记录将以引擎所需的任何顺序出现……可能是 ID 索引的顺序,或涉及日期的复合索引。如果您希望按日期字段进行一致的排序,则使用表的主键。如果不存在主键,则需要按所有列排序,这将使记录唯一。
所以..
SELECT id FROM `mytable` ORDER BY `myfield`, `PK`
对比
SELECT * FROM `mytable` ORDER BY `myfield`, `PK`
将产生相同的顺序。
关于Mysql 表以相同的 order by 子句排序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36634973/