Home > Back-end >  Query DB Laravel
Query DB Laravel

Time:10-01

I'm trying to count the post count of each tag, then orderBy by the post count. But there was a problem when counting the number of posts: tags with no posts were not displayed. I want if any tag has no post, it will still be printed. What should I do.

    $query = DB::table('tags');
    $query -> join('users', 'users.id', '=', 'tags.user_creative_id' );
    $query -> join('tag_post', 'tag_post.tag_id', '=', 'tags.id' )
           ->select('tags.*', 
                     DB::raw('(SELECT count(*) FROM tag_post WHERE tags.id = tag_post.tag_id )  as count_posts')    
            )
           ->orderBy('count_posts','desc')
           ->groupBy('tags.id');

CodePudding user response:

you can use LeftJoin to show all rows from left table that doing join:

 $query = DB::table('tags');
    $query -> join('users', 'users.id', '=', 'tags.user_creative_id' );
    $query -> leftJoin('tag_post', 'tag_post.tag_id', '=', 'tags.id' )
           ->select('tags.*', 
                     DB::raw('(SELECT count(*) FROM tag_post WHERE tags.id = tag_post.tag_id )  as count_posts')    
            )
           ->orderBy('count_posts','desc')
           ->groupBy('tags.id');
  • Related