2011-02-04 55 views
2

我有如下表:MySQL的反對multple值匹配

nid | tag_id 
-------------- 
1 | 213 
1 | 78 
2 | 938 
2 | 1002 
2 | 8573 
2 | 5 
3 | 3957 
3 | 487 
4 | 56 

我想中檢索,其中TAG_ID匹配多個值說1002,938,8573一個NID。

我開始用下面的查詢:

SELECT nid,GROUP_CONCAT(DISTINCT tag_id ORDER BY tag_id) tag_ids FROM table GROUP BY nid 

返回:

nid | tag_ids 
-------------- 
1 | 78,213 
2 | 5,938,1002,8573 
3 | 487,3957 
4 | 56 

但我還沒有發現任何東西那將讓我再次我一套符合tag_ids列值。我需要它匹配所有的不只是任何價值觀。

也許我的做法是錯誤的,很高興看到不同的方法。

任何輸入非常讚賞。

感謝 史蒂夫

回答

7

假設你正在構建查詢在某種應用程序代碼,您可以使用

SELECT nid 
FROM table 
WHERE tag_id IN (tag1, tag2, tag3, ...) 
GROUP BY nid 
HAVING COUNT(*) = n; 

其中n是在列表標籤​​的數量。這應該找到與您的整個標籤列表相匹配的所有nid。

1

也許HAVING條款會給你想要的東西。

+0

我不太清楚我可以如何使用having子句來匹配幾個值。你能給我一個例如嗎? – 2011-02-04 10:56:28

+0

HAVING X OR Y OR Z,maybe .... – duffymo 2011-02-04 11:10:11