nepster-web
@nepster-web

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

Есть таблица 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 теги.
Сижу ломаю голову, подскажите как это можно сделать?
  • Вопрос задан
  • 2586 просмотров
Решения вопроса 1
e_s_l
@e_s_l
Full-stack web developer
на сколько я понял, нужно выбрать все посты, у которых теги максимально соответствуют тегам текущего поста (причем самые похожие должны быть сверху)
select p.*, count(pt.id) similar_tags_count
from posts p
inner join posts_tags pt on pt.post_id = p.id and pt.tag_id in (select tag_id from posts_tags where post_id = 1) #id текущего поста
where p.id != 1 #id текущего поста
group by p.id
order by count(pt.id) desc

1 - это id текущего поста в запросе
similar_tags_qty - количество совпадающих тегов
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы