我试图按列值对结果进行排序,但它不起作用
$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: 选择id
,comment
,user_name
,product_id
,rating
, 来自country
的{{1}},status
,pin
,created_at
comments
=和shop_name
= 按IF(product_url =' customer')DESC,product_url订购 =手动ASC,product_id
desc,pin
desc)
答案 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