Я хочу запросить рейтинг в базе данных с помощью 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");
Он вызывает синтаксическую ошибку, как я могу решить эту проблему
Ваш необработанный запрос не имеет для меня смысла. Можете ли вы добавить несколько примеров данных к вашему вопросу?
вы пробовали свой запрос в самой базе данных?






использовать этот
$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.
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 Я исправил синтаксическую ошибку php / laravel, также вы можете изменить whereRaw на selectRaw, чтобы получить результат sql. На самом деле это ошибка в SQL-запросе, поэтому сначала исправьте это
@IjasAmeenudeen да, вы правы, я спешу исправить синтаксическую ошибку в Laravel, поэтому я ее пропустил, спасибо за указание.
Ваш необработанный 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 по убыванию)
Вы уверены, что ваш необработанный sql работает. Отметьте это snippi.com/s/6hew1ty. ваш sql и сгенерированный один и тот же.
О, исправьте это и следуйте предоставленным мною ответам.
Попробуй это:
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 ранг)
Проблема с вашим запросом не при преобразовании в laravel. Какую базу данных вы используете?
используйте DB :: select ("SELECT 'id', 'name', 'local_pic', 'point', FIND_IN_SET ('point', (SELECT GROUP_CONCAT ('point' ORDER BY 'point' DESC) FROM 'student')) AS ранг ОТ 'студенты' ЗАКАЗАТЬ ПО званию ");