Как мне перечислить связанные посты в блоге, упорядоченные по количеству общих тегов? - PullRequest
1 голос
/ 04 мая 2009

Я хочу отобразить список связанных сообщений в блоге, и я хочу, чтобы список был упорядочен по количеству общих тегов, которые они имеют для текущего сообщения. Каждое сообщение может иметь несколько тегов, связанных с ним. Вот моя структура таблицы:

[Posts] <- [posts-to-tags-joining-table] -> [Tags]

Я использую PHP и MySQL - могу ли я сделать это одним запросом?

Ответы [ 2 ]

5 голосов
/ 04 мая 2009

Конечно, вы можете сделать это одним запросом:

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; 
0 голосов
/ 04 мая 2009

А как же ...:

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 в качестве первичного ключа в таблице posts, tid в качестве первичного ключа в таблице тегов, оба внешних ключа в таблице p2t (post to tag)?

...