3 回答

TA貢獻1797條經驗 獲得超6個贊
我認為以下解決方案也可以:
SELECT DISTINCT event_id FROM events_users GROUP BY event_id
HAVING GROUP_CONCAT(DISTINCT user_id ORDER BY user_id asc SEPARATOR ',')="23,32"
您可以在查詢之前對 user_id 數組進行排序和連接。
Laravel 查詢構建器方法:
$user_id_str=implode(",",[23,32]);
DB::table('events_users')
->selectRaw("distinct event_id")
->groupBy('event_id')
->havingRaw("GROUP_CONCAT(DISTINCT user_id ORDER BY user_id asc SEPARATOR ',')='$user_id_str'")->get();

TA貢獻1874條經驗 獲得超12個贊
一種 SQL 方法是使用基于條件聚合的過濾。我們使用事件聚合GROUP BY,然后使用HAVING子句過濾掉行:
SELECT event_id
FROM events_users
GROUP BY event_id
HAVING
SUM(user_id = 23) -- event exists for user = 23
AND
SUM(user_id = 32) -- event exists for user = 32
AND
NOT SUM(user_id NOT IN (23,32)) -- no other row exists other than user 23 and 32

TA貢獻1780條經驗 獲得超5個贊
此解決方案不適用于具有相同類型的獨家成員的多個事件的情況。這是不正確的解決方案。我道歉。 Phil 的解決方案有效,因此我將其標記為解決方案。
我有適合我的解決方案。如果您認為有缺陷,請告訴我。
DB::table('events_users')
->whereIn('user_id', [23, 32])
->havingRaw('count(user_id) = ?', [2])
->get();
這給了我只有用戶 23 和 32 的獨家活動,沒有其他成員。我假設給定的用戶和用戶數量是互斥的,因為在事件中不會有重復的用戶條目。讓我知道這是否在任何情況下都失敗了。
- 3 回答
- 0 關注
- 164 瀏覽
添加回答
舉報