Intereting Posts

SQL-запрос для выбора сообщений, относящихся к нескольким категориям

Я пишу веб-приложение, похожее на программное обеспечение для ведения блога. Есть три таблицы, как показано ниже

Posts Table: Post_id,Post_Text Post_Tags Table: Post_id,Tag_id Tags Table:Tag_id,Tag_name 

У меня есть трудности в концептуализации SQL-запроса, который будет возвращать сообщения, которые имеют «все теги» в заданном наборе.

Это реляционное деление .

Используйте GROUP BY и COUNT или double NOT EXISTS .

Примером первого подхода будет.

 SELECT pt.Post_id, p.Post_Text FROM Post_Tags pt JOIN Posts p ON p.Post_id = pt.Post_id WHERE pt.Tag_id IN (1,2,3) GROUP BY pt.Post_id HAVING COUNT(DISTINCT pt.Tag_id) = 3 

Попробуй это:

 select * from posts where post_id in (select post_id from post_tags pt join tags t on pt.tag_id = t.tag_id where tag_name = @yourtaghere) 

или…

 select p.* from posts p join post_tags pt on p.post_id = pt.post_id join tags t on t.tag_id = pt.tag_id where t.tag_name = @yourtaghere 

Если у вас несколько тэгов, которые вы пытаетесь сопоставить, замените имя_таблицы = @youtagehere с именем tag_ в ('tag1', 'tag2', 'tag3' и т. Д.).