这是我之前读过的一个问题:
这是一个复杂的情况(对我来说),我希望有人 在这里可以帮助我。我已经做了很多寻找解决方案 并且无法找到一个。这基本上是我的 情况......(我把它修剪下来因为如果有人可以帮我的话 我可以从那里创建这个查询。)
表文章(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)
答案 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