Как получить счет в соединении Query в Laravel - PullRequest
0 голосов
/ 31 января 2019

Я хочу преобразовать следующий 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]: синтаксическая ошибка или нарушение прав доступа: 1055 'colorworld.brands.id' отсутствует в GROUP BY (SQL: выбрать бренды. *, Brands.brand_name, brands.id, считать (user_activities.action_type) как user_activitiesCount fromuser_activities левое соединение brands на brands. id = user_activities. brand_id группирование по user_activities. brand_id)

Я пытался установить 'strict' => true, в database.php, но я получаю ту же ошибку в Laravel 5.7.

Обновление: - таблица базы данных

Brand Table User activities

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы можете использовать 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();
0 голосов
/ 31 января 2019

Если я правильно понял ваш вопрос, вы пытаетесь найти количество действий пользователя, сгруппированных по названию бренда.Также вы хотите, чтобы топ-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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...