Как мне перечислить связанные посты в блоге, упорядоченные по количеству общих тегов?
Вопрос
Я хочу отобразить список связанных сообщений в блоге и упорядочить список по количеству общих тегов, которые они имеют для текущего сообщения. Каждое сообщение может иметь несколько тегов, связанных с ним. Вот моя структура таблицы:
[Posts] < - [posts-to-tags-joining-table] - > [Теги]
Я использую PHP и MySQL - могу ли я сделать это одним запросом?
Решение
Как насчет ...:
SELECT COUNT(*) AS numcommon, posts.pid, posts.post FROM posts
INNER JOIN p2t ON p2t.pid = posts.pid
WHERE p2t.tid IN
(SELECT p2t.tid FROM p2t
INNER JOIN posts ON p2t.pid = posts.pid
WHERE posts.pid = 1)
AND posts.pid != 1
GROUP BY posts.pid
ORDER BY numcommon
принимая pid в качестве первичного ключа в таблице сообщений, tid в качестве первичного ключа в таблице тегов, оба внешних ключа в таблице p2t (запись в тег)?
Другие советы
Конечно, вы можете сделать это одним запросом:
SELECT postid, count(tagid) as common_tag_count
FROM posts_to_tags
WHERE tagid IN (SELECT tagid FROM posts_to_tags WHERE postid = 2)
GROUP BY postid ORDER BY common_tag_count DESC;
Не связан с StackOverflow