Mysql 表以相同的 order by 子句排序不同

标签 mysql sql-order-by

<分区>

我注意到下面的查询

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/

相关文章:

php - 无论如何要对 ID 进行排序?

Mysql 随机排序特色产品,但按日期对正常产品进行排序

c# - LINQ OrderBy 查询

python - 按链式连接关系中的列排序

mysql - 对列求和或新列

php - 列计数与第1行的值计数不匹配(错误)

python - 带增量字段的 LOAD DATA LOCAL INFILE

javascript - 如何在 sequelize 中使用 afterCreate Hook 创建另一个实例

mysql - ThinkingSphinx 匹配精确短语

mysql - 如果第一行将被随机化,其余行应按标准排序,如何选​​择行