Как получить похожие записи по тегам через промежуточную таблицу?

Рейтинг: 1Ответов: 1Опубликовано: 28.10.2014

Есть таблица Post. Еще есть таблица Post_Tags и Tags:

Post_Tags: Post_id, Tag_id
Tags: Tag_id, Name

К примеру, есть запись, у которой 5 тегов: Тег1, Тег2, Тег3, Тег4, Тег5.
Следовательно, в таблице Post_Tags 5 записей (ID поста, ID тега).

Задача: получить все посты, которые совпадают по тегам с сортировкой по количеству.

То есть все посты, у которых есть какие-либо из Тег1, Тег2, Тег3, Тег4, Тег5 теги.
Подскажите, как это можно сделать?

Обновление

Я оформил запрос, он работает, но еще не понял, как =). Большое спасибо. А можно, я налеплю еще сюда джоин?

SELECT Post.title, Post_Tags.article_id, count(*) count_alike_tags 
FROM `article_tags` Post_Tags
    LEFT JOIN `Article` Post
    ON Post_Tags.article_id = Post.id
    WHERE tag_id IN (SELECT tag_id FROM article_tags Post_Tags_Alias
 WHERE Post_Tags_Alias.article_id=1 AND Post_Tags.article_id <>
 Post_Tags_Alias.article_id)
    GROUP BY Post_Tags.article_id
    ORDER BY count_alike_tags DESC;

Ответы

▲ 2Принят

Если правильно понял:

select pt1.post_id, count(*) qty from post_tags pt1
where tag_id in (select tag_id from post_tags pt2 where pt2.post_id=< заданный > and pt1.post_id<>pt2.post_id)
group by pt1.post_id
order by qty desc