所以我在一个数据库中有一堆记录,这些记录有一个Date_Created列,但是大多数行都有零数据。
+-----+---------------------+--
| id | Date_Created | Other_Fields...
+-----+---------------------+--
| 2 | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 34 | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 56 | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| ... | ... | ...
+-----+---------------------+--
有些行包含此列的非零数据,但这些行目前不是我关注的行。
我想知道的是,当我订购数据by Date_Created asc
时,行以我不希望看到的方式返回。这就是ID的排序方式。
256
512
1024
1280
1536
257
513
1025
1281
1537
2049
2
258
514
1026
1282
1538
3
259
515
1027
1283
1539
4
260
...
(256的倍数)+ n,其中Date_Created基本上为0,用于整个事物。
仅当我select * from table order by Date_Created
时才会发生这种情况。如果选择单个列(select id, Date_Created...
),则ID会按顺序出现。
为什么会这样?
答案 0 :(得分:2)
如果您按ORDER BY日期,mysql将完全这样做。如果所有日期都“相等”,则mysql不关心INSIDE中具有相同日期的元素的顺序。 (因为没有被告知,这样做!)
然后将结果称为“未定义”。它很可能取决于mysql将用于获取结果的(多个)线程。结果也可能与呼叫呼叫不同。
因此,如果您想确保在SAME数据上拥有SAME调用的SAME订单 - 请始终按id
排序。
select * from table order by Date_Created, id