Laravel Несколько соединений с количеством - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь объединить несколько таблиц с подсчетом, если я разделю его, я могу заставить его работать, но нет ли способа сделать это в одном отчете или мне нужно сделать это другим способом?

 $posts = DB::table('posts')
                ->limit(5)
                ->join('badges', 'posts.badge', '=', 'badges.id')
                ->join('blog_cat', 'posts.maincat', '=', 'blog_cat.id')
                ->select('posts.*', 'badges.css' , 'badges.desc')
                ->get();

         $posts = DB::table('posts')
                    ->join('comments_blogs', 'posts.id', '=', 'comments_blogs.blog_id')
                    ->select('posts.id as id', DB::raw("count(*) as count"))
                    ->groupBy('posts.id')
                    ->get();

Спасибо за помощь Лимуз

1 Ответ

0 голосов
/ 19 марта 2020

Следующее может работать, потому что вы группируете по первичному ключу таблицы posts. Счетчик агрегации должен быть в первичном ключе DISTINCT, чтобы избежать его многократного подсчета из-за других объединений badges и blog_cat.

$posts = DB::table('posts')
                ->limit(5)
                ->join('badges', 'posts.badge', '=', 'badges.id')
                ->join('blog_cat', 'posts.maincat', '=', 'blog_cat.id')
                ->join('comments_blogs', 'posts.id', '=', 'comments_blogs.blog_id', 'left outer')
                ->select('posts.*', 'badges.css' , 'badges.desc',DB::raw("count(distinct comments_blogs.id) as count"))
                ->groupBy('posts.id')
                ->get();

Сам по себе второй можно упростить до :

    $posts = DB::table('comments_blogs')
                ->select('blog_id as id', DB::raw("count(*) as count"))
                ->groupBy('blog_id')
                ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...