我有三张桌子
博客表
id blog description
1 Simple PHP Nothing But simple
2 Simple JS Nothing But JS
第二个表是标签
id tag
1 JS
2 PHP
3 mysql
第三张表是Blog_Tag
id blog_id tag_id
1 1 2
2 1 3
3 2 1
所以我需要的是基于搜索的tag
这是我试过的
例如,如果我使用PHP和Mysql标签搜索id为1的博客
Select Blog.* From Blog B INNER JOIN Blog_Tag BT ON(B.id=BT.blog_id)
WHERE BT.tag_id = 2 OR BT.tag_id=3
但是这个查询多次输出Blog 1。有哪些解决方案?
答案 0 :(得分:1)
tag_id 2 and 3
同一个Blog.ID
背后的原因。看看这个查询
Select B.*,BT.tag_id From Blog B INNER JOIN Blog_Tag BT ON(B.id=BT.blog_id)
WHERE BT.tag_id = 2 OR BT.tag_id=3
对于唯一数据的解决方案,您需要使用Distinct
,例如我在下面的查询中使用
Select DISTINCT B.* From Blog B INNER JOIN Blog_Tag BT ON(B.id=BT.blog_id)
WHERE BT.tag_id = 2 OR BT.tag_id=3
答案 1 :(得分:1)
在您的查询中使用distinct或group by,如
distinct blog
或group by blog
。
Select DISTINCT blog, B.* From Blog B INNER JOIN Blog_Tag BT ON(B.id=BT.blog_id)
WHERE BT.tag_id = 2 OR BT.tag_id=3
Select * From Blog B INNER JOIN Blog_Tag BT ON(B.id=BT.blog_id)
WHERE BT.tag_id = 2 OR BT.tag_id=3 GROUP BY blog
答案 2 :(得分:0)
一个简单的地方给出了查询的所有答案。在你的情况下,博客1适合该法案两次。如果你想要单一的答案,我建议按照命令查看组。
答案 3 :(得分:0)
作为上述问题的解决方案,请尝试执行以下SQL查询
select * from blog where id in(select blog_id from blog_tag where tag_id in(2,3))