2016-09-14 54 views
0

我正在創建一個用戶可以加入某些組的網站。現在我需要維護每個組中的用戶組和/或每個用戶加入的組。由於MySql不支持數組,因此我無法說,組中的用戶數組(作爲「組」表中的字段)或用戶組中的數組(作爲「用戶」表中的字段) 。那麼我怎麼能做到這一點?mysql - 維護網站中某個組的訂閱列表

我目前的解決方案是維護一個包含userID和groupID字段的組訂閱表。所以,當我需要這兩種列表的我能做的,

SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3 

SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4 

這將讓我想要的清單。這是做到這一點的最有效/標準的方式,還是有更好的方法?

回答

1

你寫得沒錯。

通常有3種類型相對數據庫記錄之間的關係:

  1. 一個 - 一個(例如userprofile通過user.profile_id = profile.id鏈接)
  2. 一個 - 許多(usermessages通過message.user_id = user.id鏈接)
  3. 很多 - 很多

您的情況是las噸,它總是通過第三張桌子工作。

對於您的情況下,可以users_subscriptions (user_id, subscription_id)

示例查詢選擇所有用戶與他們的訂閱:

SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions` 
FROM users u 
JOIN users_subscriptions us ON us.user_id = u.id 
JOIN subscriptions s ON us.subscription_id = s.id 
GROUP BY u.id 
+0

謝謝@Stalinko! – samurdhilbk

1

如果我正確理解你的問題,那就是標準的方式。

您已經創建了位於用戶表和組表之間的「數據透視表」,並存儲了兩者之間的關係。這是多對多關係存儲在關係數據庫中的方式。正如您正確地指出的那樣,您可以通過這種方式檢索組中的所有成員或所有組。