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

Laravel使用orderByRaw按列值排序时触发SQL语法错误

解决排序语法错误的问题

嘿,我一眼就发现你遇到的问题根源了——你的MySQL IF() 函数写法不符合语法规范,还有一处字符串没加引号,这才触发了SQL语法错误!

错误原因拆解

  1. MySQL IF() 函数参数缺失:MySQL的IF()函数需要三个参数,格式是IF(条件, 条件成立时的值, 条件不成立时的值),你只写了判断条件,漏掉了后两个必填参数,导致SQL解析失败。
  2. 字符串未加引号:第二个排序规则里的manually是字符串值,你没给它加单引号,MySQL会把它当成列名来解析,这也是语法错误的诱因之一。

修正后的代码

$users = Comment::select([
        'id', 
        'comment', 
        'user_name', 
        'product_id', 
        'rating', 
        'country', 
        'status', 
        'pin', 
        'created_at',
    ])
    ->where('shop_name', $shop)
    ->where('product_id', $id)
    ->with('images')
    // 修正IF函数语法:满足条件返回1,不满足返回0,DESC把符合的排前面
    ->orderByRaw("IF(product_url = 'customer', 1, 0) DESC")
    // 给manually加单引号,直接比较的话MySQL会把布尔值转成1/0实现排序
    ->orderByRaw("product_url = 'manually' DESC")
    ->orderBy('pin', 'desc')
    ->orderBy('rating', 'desc')
    ->with('pages')
    ->get();

额外提醒

从你给出的错误SQL里还看到shop_name = and product_id =,这说明变量$shop和$id可能是空值,后续可能会触发新的查询错误,记得检查这两个变量是否正确赋值哦!

内容的提问来源于stack exchange,提问作者areviews app

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:01