繁体   English   中英

使用 Laravel 查询构建器连接两个表无法获得结果

[英]Failed to get result using laravel query builder to join two table

我有两个表“用户”和“频道

表:用户

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

表:渠道

id   channel_name
1    IT
2    CS
3    EC

我需要结果

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

使用 Laravel 查询构建器如何编写查询?

我在下面尝试过,但我将channel_name设为NULL

尝试 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();

尝试 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();

试试这个查询。

\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();

请检查我的回答

这是您的解决方案,请检查

    $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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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