基于标记的搜索与PHP中的另一个表相关

时间:2016-09-06 13:19:12

标签: php mysql

我有三张桌子

博客表

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。有哪些解决方案?

4 个答案:

答案 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 bloggroup 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))