Laravel orderBy с ошибкой значения столбца - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь отсортировать результаты по значению столбца, но это не работает

$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, status, pin, created_at от comments, где shop_name = и product_id = заказ по IF (product_url = 'customer') DESC, product_url = вручную ASC, pin desc, rating desc)

1 Ответ

0 голосов
/ 15 мая 2018

MySQL IF функция принимает три аргумента.

Это выражение недопустимо:

  IF(product_url = 'customer')

, поскольку для IF() предоставляется только один аргументfunction.

Мы могли бы сделать это:

  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            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...