laravel 8 查询构建器中不同数据类型的复杂连接
Complex join with different data types in laravel 8 query builder
我有两个表 Infos 和 nationalities,如下所示:
1) Table 信息:
id(pk)
name
nationality(varchar) accept multiple nationalities
1
John
1,2,3
2
Camilia
2,4
1) Table 国籍:
id(pk) int
desig
1
German
2
Turkey
3
Algeria
4
Qatar
我想在输出中得到这样的东西:
desig
count
German
1
Turkey
2
Algeria
1
Qatar
1
为此,我尝试了类似的方法(但没有帮助):
$total_nationalite = DB::table('infos')
->select('desig', 'nationalities.id',DB::raw('COUNT(*) as count'))
->join('nationalities', DB::raw('CAST(nationalities.id as varchar)'), '=', 'infos.nationality')
->groupBy('desig','nationalities.id')
->get();
请使用 查询构建器 或 postgres 中的简单查询提出任何建议。
在 nationality
字段中使用逗号分隔的值文本列表是个坏主意。有一个整数数组,或者 - 更好 - 一个规范化设计。不管怎样,这是一个本地查询解决方案。
select desig, count(*) count
from
(
select unnest(string_to_array(nationality, ','))::integer nat_id
from infos
) t
join nationalities n on t.nat_id = n.id
group by desig;
desig
count
German
1
Qatar
1
Algeria
1
Turkey
2
我有两个表 Infos 和 nationalities,如下所示:
1) Table 信息:
id(pk) | name | nationality(varchar) accept multiple nationalities |
---|---|---|
1 | John | 1,2,3 |
2 | Camilia | 2,4 |
1) Table 国籍:
id(pk) int | desig |
---|---|
1 | German |
2 | Turkey |
3 | Algeria |
4 | Qatar |
我想在输出中得到这样的东西:
desig | count |
---|---|
German | 1 |
Turkey | 2 |
Algeria | 1 |
Qatar | 1 |
为此,我尝试了类似的方法(但没有帮助):
$total_nationalite = DB::table('infos')
->select('desig', 'nationalities.id',DB::raw('COUNT(*) as count'))
->join('nationalities', DB::raw('CAST(nationalities.id as varchar)'), '=', 'infos.nationality')
->groupBy('desig','nationalities.id')
->get();
请使用 查询构建器 或 postgres 中的简单查询提出任何建议。
在 nationality
字段中使用逗号分隔的值文本列表是个坏主意。有一个整数数组,或者 - 更好 - 一个规范化设计。不管怎样,这是一个本地查询解决方案。
select desig, count(*) count
from
(
select unnest(string_to_array(nationality, ','))::integer nat_id
from infos
) t
join nationalities n on t.nat_id = n.id
group by desig;
desig | count |
---|---|
German | 1 |
Qatar | 1 |
Algeria | 1 |
Turkey | 2 |