[英]MySQL using Group By to limit results
好的,所以我试图执行一个包含4个表,用户,事件,event_roles,user_event_role的查询。
用户可以填充多个角色。 我想要做的是得到一个看起来更像这样的结果:用户,事件,角色
因此,如果用户'Bill'与事件'Meeting'和'Bill'相关联,则填充多个角色而不是获得如下结果:
user event role
--------------------------
bill Meeting admin
bill Meeting director
我怎么能得到这样的结果呢?
user event role role
----------------------------------
bill Meeting admin director
这是我正在尝试构建的查询。
Select *
FROM `users` u
LEFT JOIN `event_role` er ON u.user_id = er.user_id
LEFT JOIN `events` e ON er.event_id = e.event_id
您寻求的结果是不可能的。
然而,有一些接近:
SELECT
user,
event,
group_concat(role SEPARATOR ',') as roles
FROM
`users` u
LEFT JOIN `event_role` er
ON u.user_id = er.user_id
LEFT JOIN `events` e
ON er.event_id = e.event_id
GROUP BY u.user_id
会产生:
user event roles
----------------------
bill Meeting admin,director
在任何一种情况下,您都需要调整逻辑以正确解析它。
你不可能得到这样的结果,因为你不知道可能有多少角色(即列数),但你可以这样使用GROUP_CONCAT
:
SELECT *,
GROUP_CONCAT(event_roles.role SEPARATOR ',') as roles
FROM users
LEFT JOIN event_role USING(user_id)
LEFT JOIN events USING(user_id)
GROUP BY user_id
使用此查询,您将获得所有角色,
。 但要注意GROUP_CONCAT
的限制,默认值设置为1024个字符,这可能不够(请参阅my.cnf
)。
像这样使用Group_concat( http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html )。 为了快速展示,我正在使用Ben Forta( http://www.forta.com/books/0672327120/ )出色的MySQL介绍书中的数据库,没有任何从属关系。
SELECT v.vend_id, GROUP_CONCAT(p.prod_id)
FROM products p
JOIN vendors v ON v.vend_id= p.vend_id
JOIN orderitems oi ON oi.prod_id = p.prod_id
GROUP BY v.vend_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.