2013-05-12 37 views
2

这是我读过的上一个问题:MySQL查询通过标签查找相关帖子并按流行排序?

这是一个复杂的情况(对我而言),我希望有人在 这里可以帮助我。我已经做了大量的搜索解决方案 ,并没有找到一个。这基本上是我的 情况......(我修剪下来,因为如果有人能帮助我 创建此查询,我可以把它从那里。)

表项目(article_id的,ARTICLE_TITLE)

TABLE 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可能在 中共有的文章,按照常用条目的数量排序。

例如:

第一条 - 标签:TAG1,TAG2,TAG3 - 类别:CAT1,CAT2

第二条 - 标签:TAG2 - 类:CAT1,CAT2

第三条 - tags:tag1,tag3 - categories:cat1

所以如果我的文章有“tag1”和“cat1 and cat2”,它应该返回 articl顺序ES:

第一条(标签1,CAT1和CAT2普通)

第三条(标签1,CAT1中常见)

第二条(共同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) 
+0

所以,你有一个工作查询不计数为您和您要添加排序? – 2013-05-12 15:44:39

回答

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 
+0

非常感谢!正是我想要的。 – TrungDQ 2013-05-12 17:23:37