我得到一些MySQL查询的行为,我不理解
我正在运行MySQL 5.5.42
WHAT I HAVE
我有一个包含列的表:
- id (int, auto increment)
- party_id (int -添加行时后端设置)
- addded_on (datetime -后端添加一行时设置,即我不使用ON UPDATE CURRENT_TIMESTAMP)
我想做什么
我想执行以下查询:
SELECT * FROM my_table WHERE party_id = 1 ORDER BY addded_on ASC
SELECT * FROM my_table WHERE party_id IN(1,2,3…)ORDER BY added_on ASC
当同一个party_id的addded_on日期相同时,会出现奇怪的行为(如上所述,addded_on日期由后端设置,而不是MySQL)
例如:- id = 100
- party_id = 1
- addded_on = 2015-10-12 00:00:00
和
- id = 101
- party_id = 1
- addded_on = 2015-10-12 00:00:00
当我运行这个查询(SELECT * FROM my_table WHERE party_id = 1 ORDER BY addded_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或以上)运行查询时,返回的结果是按added_on的顺序,但是在added_on相同的地方,结果是相反的-所以在上面的例子中,party_id为1,结果返回id = 101,然后id = 100
请注意,它不需要是id = 89它只需要是89+ id我在"party_id in(…)"中查询
我测试了什么
我认为这可能是一个微时间问题,但两次给我。000000作为微时间加上-正如我上面说的-我使用相同的added_on日期当我插入行,所以他们应该是完全相同的。
我已经手动检查了这些查询在phpMyAdmin也得到相同的结果。我最初认为这是一个问题与后端代码或框架我正在使用,但似乎不是。
你知道我哪里做错了吗?
尝试添加二级列id
:
SELECT *
FROM my_table
WHERE party_id IN (1,2,3,89)
ORDER BY added_on ASC, id ASC