Как получить количество в запросе на соединение в Laravel

Я хочу преобразовать следующий 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_activities left join brands on brands.id = user_activities.brand_id group by user_activities.brand_id)

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

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

Как получить количество в запросе на соединение в LaravelКак получить количество в запросе на соединение в Laravel

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
5 014
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Да, ты прав. но этот запрос не работает, получил ошибку «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MariaDB, для правильного синтаксиса для использования рядом с '*) as user_activitiesCount из внутреннего соединения user_activitiesbrands на brands' at line 1 (SQL: select brands.name, COUNT(user_activities.*) as user_activitiesCount from user_activities` внутреннее соединение brands на brands.id = группа user_activities.brand_id по brands.name в порядке по user_activitiesCount ограничение по описанию 5)"

Praveen Kumar 31.01.2019 17:19

обновите свой ответ "brand.name" на "brand.brand_name"

Praveen Kumar 31.01.2019 17:44

Вы можете использовать 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();

Пожалуйста, добавьте правильный ответ.

Praveen Kumar 01.02.2019 05:35

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