我正在使用一些我不理解的MySQL查询行为
我正在运行MySQL 5.5.42
我有什么
我有一个包含列的表:
我想做什么
我想执行以下查询:
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设置)
例如:
和
当我运行此查询(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中手动检查了这些查询并得到了相同的结果。我原本以为这是我使用的后端代码或框架的问题,但似乎没有。
关于我哪里出错的任何想法?
答案 0 :(得分:1)
尝试添加第二顺序列id
:
SELECT *
FROM my_table
WHERE party_id IN (1,2,3,89)
ORDER BY added_on ASC, id ASC