简体   繁体   中英

Failed to get result using laravel query builder to join two table

I have two tables ' users ' and ' channel '

Table: users

id  name        channel
1   user1       1,2,3
2   user2       2,3
3   user3       2

Table: channel

id   channel_name
1    IT
2    CS
3    EC

I need result as

name     channel_name
user1    IT,CS,EC
user2    CS,EC
user3    CS

Using laravel query builder how I write the query?

I tried below, but I got channel_name as NULL .

try 1

$UserChannelList = Users::select('users.name as username', DB::raw("(GROUP_CONCAT(channels.channel_name SEPARATOR ',')) as 'channel_name'"))
        ->leftjoin('channels', function ($join) {
          $join->whereRaw("FIND_IN_SET('channels.id', 'users.channel')");
        })
        ->groupBy('users.name')
        ->orderBy('users.name', 'ASC')
        ->get();

try 2

$UserChannelList = Users::select('users.name as username', DB::raw("(GROUP_CONCAT(channel.channel_name SEPARATOR ',')) as 'channel_name'"))
        ->leftjoin('channel', function ($join) {
          $join->on(DB::raw("CONCAT(',', 'users.channel', ',')"), 'like', DB::raw("CONCAT(',','channel.id',',')"));
        })
        ->groupBy('users.name')
        ->orderBy('users.name', 'ASC')
        ->get();

Try with this query.

\DB::table("users")
        ->select("users.*",\DB::raw("GROUP_CONCAT(channels.channel_name) as channel_name"))
        ->leftjoin("channels",\DB::raw("FIND_IN_SET(channels.id,users.channel)"),">",\DB::raw("'0'"))
        ->get();

Please check my answer

Here is your solution please check

    $UserChannelList = DB::table('users')
                        ->select('users.name', DB::raw("(GROUP_CONCAT(channels.channel_name)) as 'channel_name'"))
                        ->rightJoin('channels', function($join){
                            $join->whereRaw('FIND_IN_SET(channels.id, users.channel)');
                        })
                        ->groupBy('users.name')
                        ->orderBy('users.name', 'ASC')
                        ->get();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM