2011-01-11 65 views
1

我有一個數據庫,通過分類與內容相關,我試圖通過分類來查詢這些內容。它看起來像這樣:SQL分類幫助

Table 1 

content_id, content_name 

Table 2 

content_id, content_taxonmoy 

我在我的查詢中試圖找到具有兩種或多種相關分類的內容。我的查詢是這樣的:

SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123' 

除了它什麼都沒有返回。我後來試了一組:

SELECT content_id FROM table_1 JOIN table_2 ON table_1.content_id=table_2.content_id WHERE content_taxonomy='ABC' AND content_taxonomy='123'GROUP BY content_id, content_taxonomy 

但這也沒有工作。有什麼建議嗎?

回答

1
SELECT * 
FROM content c 
WHERE (
     SELECT COUNT(*) 
     FROM taxonomy t 
     WHERE t.content_id = c.content_id 
       AND t.content_taxonomy IN ('ABC', '123') 
     ) = 2 

上創建一個taxonomy (content_id, content_taxonomy)UNIQUE INDEX一個PRIMARY KEY這個工作速度快。

SELECT c.* 
FROM (
     SELECT content_id 
     FROM taxonomy 
     WHERE content_taxonomy IN ('ABC', '123') 
     GROUP BY 
       content_id 
     HAVING COUNT(*) = 2 
     ) t 
JOIN content c 
ON  c.content_id = t.content_id 

在這種情況下,創建一個taxonomy (content_taxonomy, content_id)UNIQUE INDEXPRIMARY KEY(注意順序或字段)。

任何一種解決方案都可能比另一種解決方案更有效,這取決於您擁有的每個內容有多少分類法以及匹配的概率是多少。