我有以下数据模型
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.然后通过
传递对象数组有更高效/更好的方法吗?任何建议,指示将不胜感激。
答案 0 :(得分:1)
你只想要一个清单吗?
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
更改为使用显式join
语法,而不是where
子句中的隐式连接。