如何创建MySQL查询以从多个表中查找相关帖子?

如何创建MySQL查询以从多个表中查找相关帖子?,mysql,sql,Mysql,Sql,这对我来说是一个复杂的情况,我希望这里的人能帮助我。我已经做了大量的搜索来寻找解决方案,但没有找到一个。这基本上就是我的处境。。。我把它删减了,因为如果有人能帮我创建这个查询,我可以从那里开始 表文章id、文章标题 表articles\u tags行\u id、article\u id、tag\u id 表项目类别行id、项目id、类别id 所有表都有共同的项目id。我知道所有标记id和类别id行是什么。我想做的是返回一个列表,其中列出了article_标签和article_类别可能有共同点的所

这对我来说是一个复杂的情况,我希望这里的人能帮助我。我已经做了大量的搜索来寻找解决方案,但没有找到一个。这基本上就是我的处境。。。我把它删减了,因为如果有人能帮我创建这个查询,我可以从那里开始

表文章id、文章标题

表articles\u tags行\u id、article\u id、tag\u id

表项目类别行id、项目id、类别id

所有表都有共同的项目id。我知道所有标记id和类别id行是什么。我想做的是返回一个列表,其中列出了article_标签和article_类别可能有共同点的所有文章,按共同条目的数量排序

例如:

第1条-标签:tag1、tag2、tag3-类别:cat1、cat2

第2条-标签:tag2-类别:cat1、cat2

第3条-标签:tag1、tag3-类别:cat1

因此,如果我的文章包含tag1、cat1和cat2,则应按以下顺序返回文章:

第1条tag1、cat1和cat2的共同点

第3条tag1,共1类

第2条共同第1类


我们真诚地感谢您的帮助!谢谢大家!

好的,这是我的初稿:

 SELECT article_id, count(*) as common_term_count FROM 
      (
      SELECT article_id FROM tags WHERE tag IN 
         (SELECT tag FROM tags WHERE article_id = :YourArticle)
      UNION ALL 
      SELECT article_id FROM categories WHERE category IN
         (SELECT category FROM categories WHERE article_id = :YourArticle)
       ) AS accumulator_table 
 GROUP BY article_id ORDER common_term_count DESC

我认为这是一种有效的MySQL语法。

如果您只是使用标记表而不是类别表,那么这是一个更优化的开始:

SELECT article_id,count(*) AS q FROM article_tags WHERE id_tag IN ( SELECT id_tag FROM article_tags WHERE article_id=41 ) AND article_id!=41 GROUP BY article_id ORDER BY q DESC
这是一个有趣的,也是一个挑战。谢谢你的回复。不幸的是,common_term_count总是返回1,但我认为它很接近。如果我取出UNION并仅从标记中选择,它将返回一个准确的计数。创建联合时,它仅返回1。有什么想法吗?我发现我有一个语法错误,颠倒了SELECT和ALL。这可能会影响结果。将进行编辑和修复。事实上,是的,我的打字错误可能是造成问题的原因。不带ALL的UNION将导致删除结果集中的所有重复记录。由于两个联合查询生成的行完全相同,这可能是导致问题的原因。很抱歉占用了您的时间。我不知道MySQL为什么会运行带有输入错误的查询,我希望两个联合查询中的列数不同。在我有限的MySQL经验中,它似乎运行了很多我希望它不会运行的查询!这就解决了问题。我感谢你抽出时间来帮助我!我花了很多时间试图了解更多关于工会和加入的情况——他们一直让我感到困惑!你刚刚为我解决了一个非常需要的问题。我真是太感谢你了-这条路是慢行的。