2

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

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

表格文章(article_id、article_title)

表article_tags(row_id、article_id、tag_id)

表 article_categories(row_id、article_id、category_id)

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

例如:

article1 - 标签:tag1、tag2、tag3 - 类别:cat1、cat2

article2 - 标签:tag2 - 类别:cat1,cat2

article3 - 标签:tag1、tag3 - 类别:cat1

因此,如果我的文章有“tag1”和“cat1 and cat2”,它应该按以下顺序返回文章:

article1(tag1、cat1 和 cat2 共有)

第3条(tag1,cat1的共同点)

第 2 条(共 1 类)

任何帮助将不胜感激!谢谢!

根据这个答案:

如何创建 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

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

TABLE articles_info (article_id, article_view, article_vote, article_something)
4

1 回答 1

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
于 2013-05-12T15:48:00.707 回答