【发布时间】:2015-07-22 00:46:35
【问题描述】:
我有这组表格:
用户表:
id username
1 user
组表:
id name
1 g1
2 g2
users_groups 表:
user_id group_id
1 1
1 2
我想得到这个结果:
id username user_groups
1 user g1,g2
我发现使用 string_agg 可以解决问题,并且在 postgres 控制台上可以解决问题,但是当我在 php 上使用相同的查询时,我收到了这条消息
SQLSTATE[HY000]: General error: 1 no such function: string_agg
这是我的查询:
select users.id, users.username, string_agg(groups.name, ', ')
from users
inner join users_groups on users.id = users_groups.user_id
inner join groups on groups.id = users_groups.group_id
group by users.id
顺便说一句:
- postgresql-9.3
- php 5.6.0
- 阿帕奇 2
- Windows 7
- laravel 5.0
【问题讨论】:
-
首先,你应该
GROUP BY users.id, users.username。groups.name列的数据类型是什么? -
你能显示php代码吗?
-
@Patrick 我做了
group by users.username没有改变,groups.name是 varchar -
@Renzo php 代码没有什么特别之处,它只是使用 laravel 进行的测试,但这里是:
dd(DB::table('users')->select(DB::raw("users.id, users.username, string_agg(groups.name, ', ')"))->join('users_groups', 'users.id', '=', 'users_groups.user_id')->join('users_groups', 'groups.id', '=', 'users_groups.group_id')->groupBy('users.id', 'users.username')->get());
标签: php postgresql laravel string-aggregation