1

Есть таблица 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;
1
  • Ваш запрос. Что хотите, то и лепите. :-)
    – msi
    28 окт 2014 в 19:48

1 ответ 1

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
3
  • Не совсем, примерно вот такой результат: +----+---------------------------------------------+ | id | title | +----+---------------------------------------------+ | 3 | Тут совпадает только 1 тег, последнее место | | 4 | Тут больше всего одинаковых тегов, 1 место | | 2 | Совпадают 2 тега | +----+---------------------------------------------+
    – Nepster
    28 окт 2014 в 17:47
  • Изменил ответ.
    – msi
    28 окт 2014 в 18:09
  • Большое спасибо. Все работает.
    – Nepster
    31 окт 2014 в 10:25

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.