You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:01:23