有了這些3個表:檢查如果用戶屬於多個組
用戶
- USER_ID
- 如first_name
- 等
基
- GROUP_ID
- 名
- 等
groups_users
- GROUP_ID
- USER_ID
很容易檢查用戶是否屬於給定的組,但是可以檢查(在單個查詢中)用戶是否屬於多個組?
E.g.是否1
的用戶是否屬於組1, 2, 3, 4
?
UPDATE
更具體的我要檢查,如果用戶屬於所有給定的羣體,而不是他是否屬於其中之一。
有了這些3個表:檢查如果用戶屬於多個組
用戶
基
groups_users
很容易檢查用戶是否屬於給定的組,但是可以檢查(在單個查詢中)用戶是否屬於多個組?
E.g.是否1
的用戶是否屬於組1, 2, 3, 4
?
UPDATE
更具體的我要檢查,如果用戶屬於所有給定的羣體,而不是他是否屬於其中之一。
這個查詢:
SELECT group_id FROM groups_users WHERE user_id=1
給你所有組用戶1
所屬。
如果你要檢查多個組,你可以這樣做:
SELECT group_id FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)
如果返回任何記錄,用戶不是在組1
,2
,3
或4
。
使用COUNT(group_id)
或COUNT(DISTINCT group_id)
來找出用戶屬於多少組。如果它等於要求的組數,它屬於所有:
SELECT COUNT(DISTINCT group_id)=4 FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)
如果用戶所屬的所有組,0
否則將返回1
。
假設你的意思是問「用戶1是否屬於所有組1,2,3,4」,答案應該是:
select case when (select count(distinct group_id)
from group_users
where user_id = 1
and group_id in (1, 2, 3, 4)
) = 4 then 'member in all four groups'
else 'not member in all four groups'
end
可以簡化計數count(*)
如果你是確保用戶沒有重複的組條目。
Thanks @Bart。請參閱我的更新。 –
我更新了我的答案。 –
非常聰明的解決方案!感謝分享它。 –