簡體   English   中英

MySQL使用Group By來限制結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM