Laravel orderBy с ошибкой значения столбца

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

$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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') DESC, product_url = manually ASC, pin desc, rating desc' at line 1 (SQL: select id, comment, user_name, product_id, rating, country, status, pin, created_at from comments where shop_name = and product_id = order by IF(product_url = 'customer') DESC, product_url = manually ASC, pin desc, rating desc)

проверьте stackoverflow.com/questions/29101242/…

Jaydp 15.05.2018 03:33

Вы можете включить результат IF в вычисляемый столбец, а затем заказать его.

tadman 15.05.2018 03:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
383
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция 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            

Другие вопросы по теме