2011-11-12 52 views
0

好吧,我會盡量讓這有道理哈哈。基本上我有4個不同的表,我試圖加入而不是做一些單獨的SQL語句,因爲MYSQL引擎應該能夠比我更好地優化它。MYSQL加入聲明 - 可選表?

基本上我有這4個表:

projects (key:id) 
project_users (key:project_id , user_id) 
users (key:id) 
tasks (key:project_id) 

這是我的查詢:

 SELECT projects.*, users.*, tasks.*, 
    FROM 
    projects JOIN (project_users JOIN 
        users ON 
        project_users.user = users.id) 
     ON projects.id = project_users.project_id 
     JOIN (tasks) 
       ON projects.id = tasks.project_id 
     WHERE projects.company = 2 ORDER BY projects.id 

基本上我想獲得的項目,在該項目的用戶,並在任務列表某個公司的項目。

問題 - 如果在此項目中沒有任務,它不會返回該項目。我仍然需要該項目,只需要爲該項目執行0個任務。

我剛接觸JOIN語句,所以如果有一些改進,我可以做,請讓我知道!

謝謝你的時間和幫助!!!!!

+1

Ehh ...我不是一個SQL迷​​,但我最初的想法是,如果你需要一個項目列表和一個任務列表,這真的是兩個查詢... –

+0

那麼他們都可以通過一個關鍵值。這意味着不用獲取項目,然後獲得這些項目中的任務列表,我希望做1個聲明,使其更快。 –

+0

您是指在PHP中,您將在迭代查詢結果時收集項目列表? –

回答

2

所有你需要做的就是添加left outer前加入該連接的任務。即使沒有任務,這會讓你的項目。