Как найти рейтинг с помощью сырого запроса laravel

Я хочу запросить рейтинг в базе данных с помощью laravel, но не работает

SQL-запрос (это работает)

SELECT
    'id',
    'name',
    'local_pic',
    'point',
    FIND_IN_SET( 'point', ( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC )
        FROM 'students' )) AS rank
FROM 'students'
ORDER BY rank

И я пытаюсь использовать

$top_students = DB::table('students')
    ->select('id','name','local_pic','point',
    ->whereRaw("find_in_set('point',( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC ) FROM 'students' )) as rank"))
   ->orderBy('rank','DESC')
   ->get();

-

$top_students = DB::select("SELECT 'id','name','local_pic','point', FIND_IN_SET( 'point', ( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC ) FROM 'students' )) AS rank FROM 'students' ORDER BY rank");

Он вызывает синтаксическую ошибку, как я могу решить эту проблему

используйте DB :: select ("SELECT 'id', 'name', 'local_pic', 'point', FIND_IN_SET ('point', (SELECT GROUP_CONCAT ('point' ORDER BY 'point' DESC) FROM 'student')) AS ранг ОТ 'студенты' ЗАКАЗАТЬ ПО званию ");

Salman Zafar 19.10.2018 10:45

Ваш необработанный запрос не имеет для меня смысла. Можете ли вы добавить несколько примеров данных к вашему вопросу?

Tim Biegeleisen 19.10.2018 10:45

вы пробовали свой запрос в самой базе данных?

Kapitan Teemo 19.10.2018 10:50
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
3
582
3

Ответы 3

использовать этот

$top_students = DB::table('students')
              ->select('id','name','local_pic','point')
              ->selectRaw("find_in_set('point',( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC ) FROM 'students' )) as rank")
              ->orderBy('rank','DESC')
              ->get();

вы пропустили некоторые закрывающие скобки, теперь синтаксические ошибки исправлены, затем вы можете проверить свой запрос, изменив ->get() на ->toSql()

Это не правильно. Ваш whereRaw не имеет смысла. Проверьте его исходный необработанный sql.

Ijas Ameenudeen 19.10.2018 11:28

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' student ')) в качестве порядка ранжирования по rank desc' в строке 1 (SQL: выберите id, name, local_pic, point из students, где find_in_set (' point ', (SELECT GROUP_CONCAT (' point 'ORDER BY' point 'DESC) FROM' student ')) как порядок ранжирования по rank по убыванию)

anan 19.10.2018 11:29

@anan Я исправил синтаксическую ошибку php / laravel, также вы можете изменить whereRaw на selectRaw, чтобы получить результат sql. На самом деле это ошибка в SQL-запросе, поэтому сначала исправьте это

Sobin Augustine 19.10.2018 12:37

@IjasAmeenudeen да, вы правы, я спешу исправить синтаксическую ошибку в Laravel, поэтому я ее пропустил, спасибо за указание.

Sobin Augustine 19.10.2018 12:39

Ваш необработанный SQL не включает оператор where. Кроме того, вы используете whereRaw() для добавления запроса сырого выбора, что неверно.

Пытаться:

\DB::table('students')
    ->select(
        'id',
        'name',
        'local_pic',
        'point',
        \DB::raw("FIND_IN_SET( 'point', ( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC ) FROM 'students' )) AS rank")
    )
    ->orderBy('rank', 'DESC')
    ->get();

Или

\DB::table('students')
    ->selectRaw("
        id,
        name,
        local_pic,
        point,
        FIND_IN_SET( 'point', ( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC ) FROM 'students' )) AS rank
    ")
    ->orderBy('rank', 'DESC')
    ->get();

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' student ')) AS ранг из students в порядке rank desc' в строке 6 (SQL: select id, name, local_pic, point, FIND_IN_SET (' point ', (SELECT GROUP_CONCAT (' point 'ORDER BY' point 'DESC) FROM' student ')) AS ранг из students в порядке rank по убыванию)

anan 19.10.2018 11:39

Вы уверены, что ваш необработанный sql работает. Отметьте это snippi.com/s/6hew1ty. ваш sql и сгенерированный один и тот же.

Ijas Ameenudeen 19.10.2018 11:55

О, исправьте это и следуйте предоставленным мною ответам.

Ijas Ameenudeen 20.10.2018 16:19

Попробуй это:

DB::select("
    SELECT
        'id',
        'name',
        'local_pic',
        'point',
        FIND_IN_SET( 'point', ( SELECT GROUP_CONCAT( 'point' ORDER BY 'point' DESC )
            FROM 'students' )) AS rank
    FROM 'students'
    ORDER BY rank
");

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' student ')) AS rank FROM' student 'ORDER BY rank' в строке 7 (SQL: SELECT 'id', 'name', 'local_pic ',' point ', FIND_IN_SET (' point ', (SELECT GROUP_CONCAT (' point 'ORDER BY' point 'DESC) FROM' студенты ')) AS ранг ОТ' студентов 'ORDER BY ранг)

anan 19.10.2018 11:52

Проблема с вашим запросом не при преобразовании в laravel. Какую базу данных вы используете?

Saeed Vaziry 19.10.2018 11:53

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