2011-01-10 49 views
0

我有成員服務每個成員提供了一個yable和表:MySQL的搜索 - 回報ID只有當它存在於所有的條件

MemberID | ServiceID 
-------------- 
1  | 2 
1  | 3 
2  | 1 
2  | 3 

所以成員可以提供任何數量的服務。 我有一個搜索表單,可以讓用戶檢查部分或全部服務。我希望能夠選擇提供用戶所選服務的所有成員(而不僅僅是其中的一部分)。我使用了WHERE ... IN..,但它返回提供至少一個所選服務的所有成員。 我現在有一個類似的查詢:

SELECT members.id 
FROM 
members 
LEFT JOIN services ON (members.id=services.memberID) 
WHERE members.id IN (....) 

任何幫助嗎? 謝謝

+0

謝謝大家的幫助!我使用了Vinay Pai解決方案,它像一個魅力一樣工作。由於Malvolio解決方案類似,我想這也可以。 – ant 2011-01-11 19:04:39

回答

0

如果我正確理解你的問題,這應該工作:

SELECT memberID 
FROM services 
WHERE ServiceID IN (...) 
GROUP BY memberID 
HAVING COUNT(*) = x; 

其中(...)是所有選定servicesIDs的列表,x是在項目(數量。 ..)

0

這個問題似乎是LEFT加入,你在檢查where子句中的members.id(「選擇所有提供用戶選擇的所有服務的成員」,所以你應該檢查on servicesID):

SELECT members.id 
FROM 
members 
JOIN services ON (members.id=services.memberID) 
WHERE servicesID IN (....) 
0

我在採訪時實際使用了這個問題的一個變種(感謝你來,螞蟻先生,如果我們決定前進,我們會通知你)。如果服務的數量少:

select s1.member_id from services s1, services s2, services s3 
where s1.member_id = s2.member_id and s2.member_id = s3.member_id 
and s1.service_id = 1 and s2.service_id = 2 and s3.service_id = 3 

如果服務的數量是不合理的高,但member_id,service_id爲是唯一的

select member_id from services group by member_id having count(*) = 100; 

(如果有100個服務)。更糟糕的情況下(沒有唯一性保證):

select member_id from services group by member_id having count(distinct service_id) = 100; 

這是緩慢的,但工程。

+0

這是一個面試問題 - eeek loool – 2011-01-10 22:27:03

相關問題