问题来源于 ecshop 的商品属性列表排序 bug。
includes/lib_goods.php 中是这样写的
'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';
然而 attr_price 字段非常傻逼地使用了 varchar 类型,造成 51 这样的价格会排在 111 后面。
修复方法是将 attr_price 转换为数字再进行排序, *1 即可
'ORDER BY a.sort_order, g.attr_price * 1, g.goods_attr_id';
测试了整型、浮点型、为 null (默认转换为0)都可以正常排序。
注:
网上的一种做法是,
order by cast(col as unsigned)
但是,这会把小数位去掉,不合理。还是使用 *1 最佳。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式