MySQL ORDER BY根据日期时间查询

时间:2015-10-12 22:01:29

标签: php mysql datetime

我正在使用一些我不理解的MySQL查询行为

我正在运行MySQL 5.5.42

我有什么

我有一个包含列的表:

  • id(int,auto increment)
  • party_id(int - 在添加行时由后端设置)
  • added_on(datetime - 在添加行时由后端设置,即我不使用ON UPDATE CURRENT_TIMESTAMP)

我想做什么

我想执行以下查询:

SELECT * FROM my_table WHERE party_id = 1 ORDER BY added_on ASC

SELECT * FROM my_table WHERE party_id IN(1,2,3 ...)ORDER BY added_on ASC

当相同的party_id的added_on日期相同时会发生奇怪的行为(如上所述,added_on日期由后端而不是MySQL设置)

例如:

  • id = 100
  • party_id = 1
  • added_on = 2015-10-12 00:00:00

  • id = 101
  • party_id = 1
  • added_on = 2015-10-12 00:00:00

当我运行此查询(SELECT * FROM my_table WHERE party_id = 1 ORDER BY added_on ASC)时,返回的结果的顺序为id = 100,然后id = 101(这是它们的顺序尽管日期相同,但仍然添加了。)

当我运行此查询(SELECT * FROM my_table WHERE IN(1,2,3,4,5) ORDER BY added_on ASC)时,返回的结果按added_on的顺序排列,其中added_on是相同的,然后最低的id(100)首先如上所述。

我的问题

当我使用 WHERE party_id IN(1,2,3,4,5 ... 89)(89或更高版本)运行查询时,返回的结果按add_on BUT的顺序排列added_on是相同的结果是相反的 - 所以在上面的示例中,party_id为1,结果返回id = 101然后id = 100

请注意,它不需要是id = 89,它只需要89 + ID我在查询" party_id IN(...)"

我测试了什么

我认为它可能是一个微时间问题,但两次都给我.000000作为microtime plus - 如上所述 - 我在插入行时使用相同的added_on日期,所以它们应该完全相同。 / p>

我也在phpMyAdmin中手动检查了这些查询并得到了相同的结果。我原本以为这是我使用的后端代码或框架的问题,但似乎没有。

关于我哪里出错的任何想法?

1 个答案:

答案 0 :(得分:1)

尝试添加第二顺序列id

SELECT * 
FROM my_table 
WHERE party_id IN (1,2,3,89) 
ORDER BY added_on ASC, id ASC