我想知道是否有人可以帮助我解决我遇到的问题。 :)
我有一个包含文章的表,名为article
,我还有一个表commonarticletechnique
,我保存了记者可以用来撰写文章的所有技巧。我还有一个表articletechnique
,我在文章和常用文章技术之间有参考。对不起我的英语,我不是母语为英语的人。所以我的情况看起来像:
Article
(Id
,Many other fields...
)
CommonArticleTechnique
(Id
,Name
,Description
)
ArticleTechnique
(Id
,FkArticleId
,FkCommonArticleTechnique
)
例如,我可以在表格中使用以下内容:
article
中,文章ID为282; commonarticletechnique
用户撰写文章时使用的各种技术; articletechnique
我可以1,282,12
2,282,13
3,282,14
所以,有了这些记录,我可以说id为282的文章有3种概念技术。
在UI中我有一个部分,用户可以在我的数据库中搜索,他们可以检查没有,一个,更多的文章技术。因此,如果我想找到一篇基于技术12,13,14的文章,我必须编写一个mysql查询来获取与我的技术匹配exactly
的所有文章。
在我的例子中,如果用户选择12,13种技术,mysql不应该返回文章282。 在这种情况下,上升的问题受两个mysql子集的交集限制。 其中一个来自从表中提取的集合,另一个来自UI,来自用户的选择。
请告诉我是否知道如何编写mysql查询,并且非常有助于不实现存储过程。
谢谢大家, Aryliah。
答案 0 :(得分:0)
我认为同一篇文章中不能有两个条目使用相同的技术(例如两次282,12)。这也意味着你不需要需要你的articletechnique表中的Id PK。
反正。
您的查询应该是这样的:
SELECT t1.FkArticleId
FROM ArticleTechnique t1
WHERE t1.fkArticleId IN (SELECT t2.FkArticleId
FROM ArticleTechnique t2
WHERE t2.FkCommonArticleTechnique IN (12, 13))
GROUP BY t1.FkArticleId
HAVING COUNT(*) = 2;
当然,x
中的HAVING COUNT(*) = x
必须等于所选技术的数量(12,13在这种情况下是...... 2种技术)