2012-10-09 44 views
0

我有3個表:只選擇特定的關係超過3個表爲m使用MYSQL記錄:n的關係

t_cards:

---------------------------- 
| card_id | customer_name | 
---------------------------- 

t_cardsxtags:

------------------------- 
| ID | card_id | tag_id | 
------------------------- 

t_tags:

--------------------- 
| tag_id | tag_name | 
--------------------- 

th e卡和標籤是m:n,所以一張卡片可以有多個標籤,一個標籤可以屬於多張卡片。

現在我的問題如下:
我想從t_cards中選擇那些具有特定標籤(或更多)的記錄,例如,與tag_ids標籤33,44和55
所以我想所有這些卡在選擇inlcuded:

  • 卡完全相同,只有那些標籤
  • 卡這些標籤也有其他附加的標籤

我該如何使用mysql?
[編輯]
更具體:我希望這些選擇,有標籤33,44和55(也許一些額外的標籤)

+1

是什麼?你嘗試多少? – Cfreak

+0

http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html http://www.pui.ch/phred/archives/2005/06/tagsystems-performance-tests .html – biziclop

+0

看起來像家庭作業 – Alfwed

回答

0

這是你在找什麼?

SELECT * FROM t_cards c INNER JOIN t_cardsxtags ct ON c.card_id = ct.card_id WHERE ct.tag_id IN (33,44,55); 
+0

不,這選擇所有記錄與標籤33,所有44和所有與55.我想選擇那些有33,44和55,也許更多 – dab

0

您的意思是?

SELECT 
    t1.* 
FROM 
    t_cards t1 
    INNER JOIN t_cardsxtags t2 ON t2.card_id=t1.card_id 
WHERE t2.tag_id IN (33,44,55) 
GROUP BY t1.card_id 
HAVING (COUNT(t2.tag_id) == 3) 

3是標籤

+0

我想我應該刪除行「#3是標籤的數量「,對嗎? – dab

+0

@dab是的,這是評論:) – Rezigned

+0

我很抱歉,但它似乎並沒有工作。代碼也有一些錯誤;選擇與33,44或55 card_id沒有意義,但即使改變後,它不會產生任何結果 – dab