MySQL查询按标签查找相关帖子并按流行排序?

时间:2013-05-12 15:24:05

标签: mysql sql

这是我之前读过的一个问题:

这是一个复杂的情况(对我来说),我希望有人  在这里可以帮助我。我已经做了很多寻找解决方案  并且无法找到一个。这基本上是我的  情况......(我把它修剪下来因为如果有人可以帮我的话  我可以从那里创建这个查询。)

  

表文章(article_id,article_title)

     

表articles_tags(row_id,article_id,tag_id)

     

TABLE article_categories(row_id,article_id,category_id)

     

所有表都有article_id的共同点。我知道所有的一切    tag_id和category_id行是。我想要做的是返回一个列表    article_tags和article_categories可能包含的所有文章    常见的,按公共条目的数量排序。

例如:

  

article1 - tags:tag1,tag2,tag3 - categories:cat1,cat2

     

article2 - tags:tag2 - categories:cat1,cat2

     

article3 - tags:tag1,tag3 - categories:cat1

     

因此,如果我的文章有“tag1”和“cat1和cat2”,那么它应该返回   这个顺序的文章:

     

第1条(共同的tag1,cat1和cat2)

     

第3条(tag1,共同的cat1)

     

第2条(共同的cat1)

     

真的很感激任何帮助!谢谢!

根据这个答案:

How to Create MySQL Query to Find Related Posts from Multiple Tables?

我使用了查询,效果非常好:

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

现在我想通过article_view对结果进行排序(还有1个表)。

TABLE articles_info (article_id, article_view, article_vote, article_something)

1 个答案:

答案 0 :(得分:6)

试试这个:

SELECT at.article_id,count(*) AS q 
FROM article_tags at
INNER JOIN article_info ai ON at.article_id = ai.article_id
WHERE at.id_tag IN (
    SELECT id_tag 
    FROM article_tags 
    WHERE article_id=41
) 
AND at.article_id!=41 
GROUP BY at.article_id 
ORDER BY q DESC, ai.article_view DESC