2011-01-11 69 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(注意顺序或字段)。

任何一种解决方案都可能比另一种解决方案更有效,这取决于您拥有的每个内容有多少分类法以及匹配的概率是多少。