php - 使用 laravel 查询生成器连接两个表无法获得结果
问题描述
我有两个表'用户'和'频道'
表:用户
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();
请检查我的回答
推荐阅读
- ios - IOS 上的 NotificationHub 注册问题(React Native)
- pyspark - 如何正确使用 Pyspark 中的 ChiSquareTest 函数?
- php - XAMPP 能够在打印 HTTP 后修改标头
- html - 当信息来自 php 站点上的 mysql 时,有没有办法进行名称换行?
- fancybox-3 - Fancybox3 位置标题正下方图像
- authentication - 通过 curl 在 wso2 中进行用户身份验证
- ruby-on-rails - Presenter 中的模板路径问题 (ActionView::Template::Error (Missing partial...)
- javascript - 如何根据边的数组对象内的数据选择边?
- azure-data-explorer - Azure 数据资源管理器是否会在排队的引入中自动处理引入的瞬时故障?
- dicom - 有没有一种简单的方法可以找到 DICOM 标签的类型?