(mysql)in排序失败及field的使用

今天处理一个bug,首页热门商品未按照预先排序展示。
前端使用ajax去后台获取数据,成功后循环商品列表渲染页面,前端不负责排序,因此问题应该出在后台返回的数据未正确排序上。
翻出后端代码,此处分为两步:
1,从热门商品表获取商品id并按字段sort排序,select commodity_id from week_hot order by sort ;
2,从商品表获取详细信息 select * from commodity where id in( id1,id2,id3);
推测 使用in导致第一步的排序失效;
查一下资料,果然使用in,会默认按ID有小到大排序,并不会按照括号内的id顺序排;
那么如何解决呢?
采用函数 order by field(str,str1,str2.。。。)
解释:字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3,str4中的记录,放在结果集最前面返回
因此sql修改后:select * from commodity where id in( id1,id2,id3) order by field(id,id1,id2,id3)
 
 
那么sql语句的执行顺序是怎麽样的呢,

猜你喜欢

转载自www.cnblogs.com/sycode/p/9935290.html