如何在Medoo中实现先显示0再按升序排序的MySQL查询?
Medoo框架实现特定排序的MySQL查询方案
你的需求是实现先显示atrow值为0的记录,再按数值从小到大排序的查询,原MySQL语句为:
SELECT DISTINCT id FROM `items` WHERE `name`='Mag' AND `var`='Bl' ORDER BY atrow + 0 ASC
你之前的Medoo代码无法正常工作,原因是直接使用字段名atrow排序,没有实现原SQL里atrow + 0的数值转换逻辑,导致可能按字符串而非数值排序。
正确的Medoo写法如下:
$item = $database->select("items", ["DISTINCT" => "id"], [ "var[=]" => "Bl", "name[=]" => "Mag", "ORDER" => ["atrow + 0" => "ASC"] ]);
关键说明:
- 要实现
SELECT DISTINCT,在Medoo的字段参数中使用["DISTINCT" => "id"]来指定去重查询id字段; - 排序部分直接将原SQL的
atrow + 0作为ORDER数组的键,Medoo会直接将该表达式拼接进SQL语句中,实现数值排序的效果; - 条件部分保持你原来的写法即可,匹配
var='Bl'和name='Mag'的记录。
如果你的需求是强制优先显示所有atrow为0的记录,再按其他数值从小到大排序(比如存在atrow为字符串"0"、"00"、"1"、"10"的场景),可以调整排序逻辑为:
$item = $database->select("items", ["DISTINCT" => "id"], [ "var[=]" => "Bl", "name[=]" => "Mag", "ORDER" => [ "(atrow = 0) DESC", "atrow + 0 ASC" ] ]);
这样会先把atrow等于0的记录排在最前面,再对其余记录按数值从小到大排序。
内容的提问来源于stack exchange,提问作者diba mooovi
相关产品推荐
相关产品推荐

