Я хочу преобразовать следующий SQL в Laravel.
SELECT COUNT('uc.*') AS count_down, bs.brand_name
FROM `user_activities` AS uc
JOIN brands AS bs ON uc.brand_id = bs.id
GROUP BY uc.brand_id
ORDER BY count_down DESC
LIMIT 5
Но при этом:
$top_donwload_list = DB::table('user_activities')
->leftJoin('brands', 'brands.id', '=', 'user_activities.brand_id')
->selectRaw('brands.*, brands.brand_name, brands.id, count(user_activities.action_type) as user_activitiesCount')
->groupBy('user_activities.brand_id')
->get();
Я получаю эту ошибку:
SQLSTATE[42000]: Syntax error or access violation: 1055 'colorworld.brands.id' isn't in GROUP BY (SQL: select brands.*, brands.brand_name, brands.id, count(user_activities.action_type) as user_activitiesCount from
user_activitiesleft joinbrandsonbrands.id=user_activities.brand_idgroup byuser_activities.brand_id)
Я пытался установить 'strict' => true, в database.php, но получаю ту же ошибку в Laravel 5.7.
Обновление: - таблица базы данных






Если я правильно понял ваш вопрос, вы пытаетесь найти количество действий пользователей, сгруппированных по названию бренда. Также вы хотите, чтобы 5 лучших записей были упорядочены по тем, с наибольшей активностью пользователей.
Итак, должно работать следующее:
$top_donwload_list = DB::table('user_activities')
->selectRaw("brands.brand_name, COUNT('user_activities.*') as user_activitiesCount")
->join('brands', 'brands.id', '=', 'user_activities.brand_id')
->groupBy('brands.brand_name')
->orderBy('user_activitiesCount', 'desc')
->take(5)
->get();
обновите свой ответ "brand.name" на "brand.brand_name"
Вы можете использовать Laravel Eloquent. Я предполагаю, что отношение между брендом и user_activities является отношением один ко многим, и здесь «Бренд» — это модель сущности бренда.
$count = Brand::leftJoin
('user_activities', function($join_brands){
$join_brands-> on
('brands.id', '=','user_activity.brand_id');
)->orderBy('user_activities.count_down','desc ')
->groupBy('user_activities.brand_id')->count();
Пожалуйста, добавьте правильный ответ.
Да, ты прав. но этот запрос не работает, получил ошибку «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MariaDB, для правильного синтаксиса для использования рядом с '*) as user_activitiesCount из внутреннего соединения
user_activitiesbrandsнаbrands' at line 1 (SQL: select brands.name, COUNT(user_activities.*) as user_activitiesCount fromuser_activities` внутреннее соединениеbrandsнаbrands.id= группаuser_activities.brand_idпоbrands.nameв порядке поuser_activitiesCountограничение по описанию 5)"