我的网站是像stackoverflow.com这样的Q& A网站。当用户创建问题时,他可以对其进行标记。之后,当他需要查找属于某个类别的所有问题时,他可以使用接受标签名称的过滤器框。根据用户条目,我将刷新作业列表。
我的桌面设计如下所示
Table: Questions
id | QuestionTitle |Other details|
----------------------------------|-------------|
1 | Why is earth round? |
2 | How much is moon's diameter? |
Table: Tags
id | tagname
----------------
1 | planets
2 | earth
3 | moon
Table: AttachedTags
id | question_id | tag_id
-------------------------
1 | 1 |2
2 | 1 |1
3 | 2 |3
在PHP / Controller中,我会在过滤器框中将标签ID作为用户输入。
在特定标记下获取所有问题的最佳方法是什么?
我使用了以下查询,但是它检索了两次作业,因为作业可以有多个类别。
SELECT
Questions.id,
Questions.jobtitle,
AttachedTags.tag_id
FROM
Questions INNER JOIN
AttachedTags ON Questions.id = AttachedTags.question_id
WHERE
AttachedTags.tag_id IN (1,2)
答案 0 :(得分:1)
是否足以添加一个不同的来过滤重复并从select中删除tag_id?
SELECT DISTINCT
Questions.id,
Questions.jobtitle
FROM
Questions INNER JOIN
AttachedTags ON Questions.id = AttachedTags.question_id
WHERE
AttachedTags.tag_id IN (1,2)