一篇文章可能有多个标签。现在同时选择多个标签怎么写sql语句查出至少符合这些标签的文章
我的表是这样的,文章表、标签表、关联表。文章表---------Articleidtitle1标题12标题23标题3标签表---------Tagsidtag_name1...
我的表是这样的,文章表、标签表、关联表。文章表---------Articleid title 1 标题1 2 标题2 3 标题3标签表---------Tagsid tag_name 1 php 2 java 3 c++关联表---------Article_has_TagsArticle_id Tags_id 1 1 1 2 1 3 2 1 2 3 3 2 3 3----------------------------------假如现在只需要查标签是php的就很容易, 关联3张表,......where Tags.id=1。现在的问题是如果同时要满足2个条件 .......where Tags.id = 1 AND Tags.id =2 ,是查不出来的。 如果用in或者or的话,比如 where Tags.id in (1,3) ,就会查出多条数据,把关联表的最后一条 也查出来了,不符合(文章至少有标签1和标签3)需求,因为这条数据的文章只有标签3没有标签1。 请问数据库应该如何设计,或者sql应该怎样写呢?
展开
1个回答
展开全部
select A.* from Article A inner join Article_has_Tags H on A.id=H.Article_id inner join Tags T on H.Tags_id=T.id where T. tag_name in('php','c++')
更多追问追答
追问
你这样会把关联表的最后一条数据 3 3 也查出来的,不符合需求。你可以试试。
追答
因为最后一项本来就含有第3种标签c++,确实没错啊,搜索条件就是php或c++,勾选标签查找目的当然是为了搜索符合其中任意一个标签的文章,如果你想达到必须同时满足勾选的标签,那就要改成:select A.* from Article A inner join Article_has_Tags H on A.id=H.Article_id inner join Tags T on H.Tags_id=T.id where T. tag_name='php' and T. tag_name='c++'
要么是与运算要么或运算,只有这两种可能啊,你勾选多个标签的目的是什么
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询