2012-03-31 70 views
1

這是我的表結構檢查組存在MySQL查詢

分組

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 

與INSERT語句的groupingId = 將失敗,因爲5001,5002,5003已經存在於groupingId =

what s HOULD是檢查我的select語句,如果成員已存在一組... 順便說一句,使用PHP這個

+0

什麼插入會失敗? – 2012-03-31 07:35:06

+1

當您插入5001,5002,5003時它會失敗,因爲它已經存在於groupingId = ** 2 ** – rjmcb 2012-03-31 07:37:08

+0

您的意思是,如果您將一個accountId添加到組中,並且如果其他組具有相同的accountIds ?當有人不希望accountId被插入時。 – riv333 2012-03-31 07:41:11

回答

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

該查詢即時爲您提供了獨一無二的字符串每個不同組

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; 

現在,你需要將它與羣體的數量比較的數量。