У меня есть три стола

Таблица блога

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 Tags, должен появиться блог с идентификатором 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

Но этот запрос выводит Блог 1 несколько раз. Какие решения?

2
Sanooj T 6 Сен 2016 в 16:19

4 ответа

Лучший ответ

Причина этого в обоих tag_id 2 and 3 Same 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
Manish 6 Сен 2016 в 13:30

Используйте в запросе отдельные или группировать по, например

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
1
kerala guy 23 Фев 2017 в 09:45

Простой где дает все ответы на запрос. и в вашем случае блог 1 отвечает всем требованиям дважды. Если вам нужны единичные ответы, я предлагаю поискать группу по команде.

0
ziraak 6 Сен 2016 в 13:30

В качестве решения вышеупомянутой проблемы попробуйте выполнить следующий SQL-запрос

select * from blog where id in(select blog_id from blog_tag where tag_id in(2,3))
0
Rubin Porwal 23 Фев 2017 в 10:03