2012-12-20 26 views
3

加入我在我的數據庫3個表梳理MySQL的外部在搜索

PROJECTS 
- id 
- name 
- date_created 
- user_created 
- status (or for disabled, 1 for enabled) 

PROJECTS_MANAGERS (a project may have 0 or more managers) 
- id 
- project_id 
- manager_username 

PROJECTS_MEMBERS (a project may have 0 or more members) 
- id 
- project_id 
- member_username 

我試圖創建一個MySQL連接查詢列出所有特定用戶參與其中的地位是項目等於1.具體來說,將列出用戶名「bob」位於「use_created」,「manager_username」或「member_username」字段以及projects.status字段爲1的所有項目的查詢。但是,成爲多個經理或成員具有相同的project_id(當然不同的ids和member_usernames)。

我試過這段代碼,但它似乎沒有工作(給我錯誤'1054未知列'projects.status'在where子句中)。我試圖做一個「全面加入」但我是來學習MySQL不支持這一點:

SELECT * 
FROM 
    `projects` as theProjects 

LEFT OUTER JOIN 
    projects_managers 
      AS theManagers 
        ON theProjects.id = theManagers.project_id 
WHERE 
    projects.status = 1 
UNION ALL 

SELECT * 
FROM 
    `projects` as theProjects 
RIGHT OUTER JOIN 
    projects_members 
      AS theMembers 
        ON theProjects.id = theMembers.project_id 
     WHERE 
    projects.status = 1 

任何幫助將不勝感激。

+2

相反ALL做UNION的,你能不能將二者結合起來select語句成一個,然後添加「(AND user_created = '鮑勃' OR manager_username = '鮑勃' OR member_username =' bob')?不知道這是你在找什麼... – Melanie

+0

我沒有你的問題的答案,但我可以建議改變數據庫模型(如果可能的話)只使用一個表的經理和他們都是似乎基本上以相同的方式工作的人(沒有雙關語意圖;-) –

+0

那麼在某些屏幕上,數據庫需要查詢以查看用戶登錄是否是經理或成員,允許某些功能 – mrc0der

回答

2

如何:

SELECT projects.* 
FROM projects 
LEFT JOIN projects_managers managers ON managers.project_id=projects.id 
LEFT JOIN projects_members members ON members.project_id=projects.id 
WHERE status=1 AND 
     (user_created="bob" OR managers.username="bob" OR members.username="bob") 
GROUP BY projects.id 
+0

d o我修改這個查詢,以便我可以做同樣的事情,除了user_created!=「Bob」和managers.username!=「Bob」和members.username!=「Bob」之外。 – mrc0der