Как найти ранг, используя необработанный запрос laravel - PullRequest
0 голосов
/ 19 октября 2018

Я хочу запросить рейтинг в базе данных с помощью 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");

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

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Ваш необработанный 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();
0 голосов
/ 19 октября 2018

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

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
");
0 голосов
/ 19 октября 2018

используйте это

$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()

...