2014-12-07 99 views
0

我的網站是Q &類似網站stackoverflow.com。當用戶創建問題時,他有能力對其進行標記。之後,當他需要查找屬於某個類別的所有問題時,他可以使用接受標籤名稱的過濾器框。根據用戶的條目,我只會刷新工作列表。使用SQL應用過濾器加入

我的表設計是像下面

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 /控制器我會得到標籤的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

我在AttachedTags表格的例子中看不到skill_id ... – 2014-12-07 11:46:45

回答

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)