有没有办法选择除匹配之外的所有人?
我正在使用标记表(article_id,tag)和文章表(article_id,title,...);
我目前的问题:现有搜索的工作方式如下:
SELECT DISTINCT `article_id` FROM `TagTable` WHERE `tag` IN ('tag1', 'tag2')
不幸的是,通过这种方式,用户可以获得包含其中一个标签的结果,而您只需要与两个标签匹配的文章.
你会如何实现它?每个标签的几个子查询似乎是一个愚蠢的想法.我的想法是选择所有并删除没有每个标签的所有人.还有更好的想法?
先感谢您.
哼.
最简单的方法是使用子查询:
SELECT a.* FROM articles a WHERE a.id IN ( SELECT article_id FROM TagTable WHERE tag = 'tag1' ) AND a.id IN ( SELECT article_id FROM TagTable WHERE tag = 'tag2' );
但既然你说你不想这样做,你可以试试:
SELECT article_id, count(DISTINCT tag) FROM TagTable WHERE tag IN ('tag1', 'tag2') GROUP BY article_id HAVING count(DISTINCT tag) = 2
我还没有测试过,但是那样的东西应该可行.您只需要确保HAVING子句等于您要查找的标签数量.