(对我而言)这是一个复杂的情况,我希望在座的人可以帮助我。我已经做了很多寻找解决方案的工作,却找不到一个解决方案。这本质上就是我的情况…(我已经将其修整了,因为如果有人可以帮助我创建此查询,则可以从那里获取它。)
表格文章(article_id,article_title)
表格articles_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相同)
article3(tag1,cat1共同)
article2(cat1的共同点)
任何帮助将不胜感激!谢谢!
好的,这是我的初稿:
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语法。