使用SQL Join应用过滤器

时间:2014-12-07 11:25:38

标签: php sql

我的网站是像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)

1 个答案:

答案 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)