Laravel orderBy列值错误

时间:2018-05-15 01:25:57

标签: php mysql sql laravel laravel-5.5

我试图按列值对结果进行排序,但它不起作用

$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')->orderByRaw("IF(product_url = 'customer')  DESC")->orderByRaw("product_url = manually ASC")->orderBy('pin', 'desc')->orderBy('rating', 'desc')->with('pages')->get();

我添加了此代码

->orderByRaw("IF(product_url = 'customer')  DESC")

我收到此错误

  

" SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在DESC附近使用正确的语法,   product_url =手动ASC,pin desc,rating desc'在第1行(SQL:   选择idcommentuser_nameproduct_idrating,   来自country的{​​{1}},statuspincreated_at   comments =和shop_name =   按IF(product_url =' customer')DESC,product_url订购   =手动ASC,product_id desc,pin desc)

1 个答案:

答案 0 :(得分:0)

MySQL IF函数接受三个参数。

此表达式无效:

  IF(product_url = 'customer')

因为IF()函数只提供了一个参数。

我们可以这样做:

  IF(product_url = 'customer',1,0)

相当于更符合ANSI标准的

  CASE WHEN product_url = 'customer' THEN 1 ELSE 0 END

MySQL速记也可以使用

  ORDER BY product_url = 'customer'   DESC

这相当于

  ORDER BY CASE
           WHEN product_url = 'customer' THEN 1 
           WHEN product_url IS NOT NULL  THEN 0
           ELSE NULL
           END   DESC