Php 如何按常用标记的数量列出相关的博客文章?

Php 如何按常用标记的数量列出相关的博客文章?,php,mysql,tags,blogs,Php,Mysql,Tags,Blogs,我想显示一个相关博客文章的列表,并希望该列表按照它们对当前文章的常用标记的数量排序。每个帖子可以有多个关联的标签。以下是我的表格结构: [张贴][标签] 我正在使用PHP和MySQL-我可以在一个查询中完成这项工作吗?确保您可以在一个查询中完成这项工作: SELECT postid, count(tagid) as common_tag_count FROM posts_to_tags WHERE tagid IN (SELECT tagid FROM posts_to_tags WHERE p

我想显示一个相关博客文章的列表,并希望该列表按照它们对当前文章的常用标记的数量排序。每个帖子可以有多个关联的标签。以下是我的表格结构:

[张贴][标签]


我正在使用PHP和MySQL-我可以在一个查询中完成这项工作吗?

确保您可以在一个查询中完成这项工作:

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; 

确定您可以在一个查询中完成此操作:

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; 
那……呢

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是tags表中的主键,p2t(post to tag)表中的两个外键?

那么

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是tags表中的主键,p2t(post to tag)表中的两个外键