这是我的表结构
分组
id groupName
1 group1
2 group2
3 group3
4 andSoOn
group_members (正确的)
groupingId accountId groupLeader
1 5001 5001
1 5002 5001
2 5001 5001
2 5002 5001
2 5003 5001
3 5001 5001
3 5002 5001
3 5003 5001
3 5004 5001
这是我的问题,每个小组都应该是独一无二的,其成员不应该在小组中相同......
例如:
group_members (错误的)
groupingId accountId groupLeader
1 5001 5001
1 5002 5001
2 5001 5001
2 5002 5001
2 5003 5001
3 5001 5001
3 5002 5001
3 5003 5001
groupingId = 3 的插入语句将失败,因为groupingId = 2
上已存在5001,5002,5003我的select语句应该是什么来检查成员是否已经存在于一个组中... 顺便说一句,即时通讯使用PHP
答案 0 :(得分:2)
你需要这样的东西
SELECT groupingId, COUNT(*) AS accounts_present
FROM group_members
WHERE accountId IN (5001,5002,5003)
GROUP BY groupingId
HAVING accounts_present=3 // 3 here is the number of accounts in the "group", i.e. in the IN clause
这将返回具有所有相关accountIds的所有groupingIds。如果它什么也没有返回,你可以确定它不是重复的。
答案 1 :(得分:1)
此查询为每个不同的组提供唯一的字符串
SELECT GROUP_CONCAT(CONCAT(accountId, ',', groupLeader) SEPARATOR '|') FROM group_members GROUP BY groupingId;
因此,这将为您提供多个不同的组
SELECT count(*) FROM (SELECT DISTINCT GROUP_CONCAT(CONCAT(accountId, ',', groupLeader) SEPARATOR '|') AS unique_string FROM group_members GROUP BY groupingId) AS tmp_table;
现在你需要将它与组数进行比较。