当前位置:  开发笔记 > 编程语言 > 正文

使用多个标签搜索Tagtable或在MySQL中选择"Select all exept"

如何解决《使用多个标签搜索Tagtable或在MySQL中选择"Selectallexept"》经验,为你挑选了1个好方法。

有没有办法选择除匹配之外的所有人?

我正在使用标记表(article_id,tag)和文章表(article_id,title,...);

我目前的问题:现有搜索的工作方式如下:

SELECT DISTINCT `article_id` FROM `TagTable` WHERE `tag` IN ('tag1', 'tag2')

不幸的是,通过这种方式,用户可以获得包含其中一个标签的结果,而您只需要与两个标签匹配的文章.

你会如何实现它?每个标签的几个子查询似乎是一个愚蠢的想法.我的想法是选择所有并删除没有每个标签的所有人.还有更好的想法?

先感谢您.



1> teacurran..:

哼.

最简单的方法是使用子查询:

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子句等于您要查找的标签数量.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有