我有以下数据模型
Table: User
USER ID
USER NAME
Table: Group
GROUP ID
GROUP NAME
Table: User Group
GROUP ID
USER ID
我正在尝试显示一个包含所有组名和相关用户的屏幕——前端是PHP
我的查询如下-
`SELECT a.group_id,
a.group_name,
GROUP_CONCAT(g.user_id) AS user_ids,
GROUP_CONCAT(u.user_fname) AS user_names
FROM group a, user_group g, user u
WHERE a.group_id = g.group_id
AND g.user_id = u.user_id
GROUP BY a.group_id`
我的问题是:正如您从上面的查询中看到的那样,我必须有两个串联字符串列表,它们表示用户id和用户名。这在PHP中变成了一个头疼的问题,因为我不得不1.将两个串联字符串分解为数组2.在两个数组中运行循环,并从中构造User对象3.然后通过传递对象阵列
有没有更有效/更好的方法来做到这一点?如有任何建议和建议,我们将不胜感激。
您只想要一个列表吗?
SELECT g.group_id, g.group_name,
GROUP_CONCAT(g.user_id, ':', u.user_fname) AS names_and_ids
FROM group g join
user_group ug
on g.group_id = ug.group_id join
user u
on ug.user_id = u.user_id
GROUP BY g.group_id, g.group_name;
注意以下变化:
- 我添加了一个
group by
,这样每组就可以得到一行 - 我将别名更改为表名的缩写,这样查询更容易阅读
- 我修改了
group_concat()
,将用户id和用户名都包含在一个列表中 - 我将
join
更改为在where
子句中使用显式join
语法,而不是隐式联接