mysql - Laravel - DB::TABLE SQL - 如何在一个查询中获取连接数据
问题描述
我有 2 个表第一个 client_group,数据如下
第二桌客户
在控制器中我有如下代码:
$client = DB::table('client_group')
->where('client_group.user_id','=',$user_id)
->join('client','client_group.client_id','=','client.id')
->select('client_group.*',
'client.client_email',
)->get();
return view('client.group', ['client'=>$client]);
从这个查询我得到如下结果:
Illuminate\Support\Collection {#1278 ▼
#items: array:2 [▼
0 => {#1188 ▼
+"id": 1
+"groupname": "testowa grupa"
+"user_id": 2
+"client_id": "4,5,6"
+"created_at": "2021-02-08 13:47:03"
+"updated_at": "0000-00-00 00:00:00"
+"client_email": "test1@wp.pl"
}
1 => {#1123 ▼
+"id": 9
+"groupname": "test2"
+"user_id": 2
+"client_id": "8,14,22"
+"created_at": "2021-01-04 15:19:33"
+"updated_at": null
+"client_email": "test3@wp.pl"
}
]
}
client_id 总是在一列中(“client_id”:“8,14,22”),因为是这样添加的。现在是我的问题和问题,如何更改视图和查询以获取一封电子邮件所有客户的电子邮件?基于client_id,低于当前视图。目前我只有一封来自 client_id 列表的电子邮件
<td>{{ $row->groupname }}</td>
<td>{{ count(explode(',',$row->client_id)) }}</td>
<td>{{ $row->client_email }}</td>
解决方案
首先,使用 FIND_IN_SET 以逗号分隔值连接表。像这样的东西-
DB::table('client_group')
->where('client_group.user_id','=',$user_id)
->join('client',\DB::raw("FIND_IN_SET(client.id,
client_group.client_id)"),">",\DB::raw("'0'"))
->select('client_group.*', \DB::raw("GROUP_CONCAT(client.client_email)
as client_emails"))
->get();
在刀片文件中,您可以获得这样的客户电子邮件 - {{ $row->client_emails }}
推荐阅读
- sql - SQL如何选择条件后的条目
- javascript - highcharts漏斗问题
- javascript - 为什么当未选中接受条款复选框或未选择性别时,我的电子邮件也显示为不正确?
- python - 我应该在事件发射器中选择处理程序的“集合”还是“列表”?
- react-native - 模态关闭后无法正常工作
- amazon-cloudformation - AWS Cloudformation how from S3 bucket names CommaDelimitedList make list of ARN - semi for loop cycle
- amazon-redshift - 如果在连接条件中的列上应用函数,Redshift 可以利用 distkey 吗?
- html - div内的CSS垂直对齐跨度
- javascript - 从 JavaScript 获取 JSON 文件并在 2021 年正确处理错误
- vba - Access VBA - 如何获取父子窗体的属性,或者获取子窗体的用户给定名称(不是对象引用名称)