mysql使用in的时候返回数据顺序不对

mysql

今天处理线上问题的时候,遇到了一个非常诡异的事情,本来都是按照正常顺序查出的数据,但是显示的时候顺序却发生了变化。于是一步一步进行跟踪调试。发现了罪魁祸首就是mysql的in函数。


平常使用in的时候,一般都没有对返回结果集数据顺序有要求,因此也没有在意in这个函数的具体用法。今天仔细研究了一下,这里面大有学问。


举个例子,比如我们的数据是这样查询的


select * from product where id in (3,4,8,5,1,6,2,7);


返回的产品结果集顺序就是1,2,3,4,5,6,7,8。它并不会按照我们期望的结果返回,如果我们想要我们期望的结果返回的话。我们的的查询语句应该修改为:


select * from product where id in (3,4,8,5,1,6,2,7) order by field(id,3,4,8,5,1,6,2,7);