2013-07-31 54 views
0

我試着加入5桌,看起來有點像這個與if條件的mysql連接表?

交表

ID |產品| user-us | make-id | dealer-id |正在等待| .... 30個其他欄... |

化妝臺

ID | make |

狀態表

前綴|狀態|城市|拉鍊

成員表

ID |名稱|電子郵件|密碼| zip |經銷商-ID

經銷商表

ID |經銷商名稱|城市|狀態| zip |地址|手機

MySQL查詢看起來像這樣

SELECT * 
    FROM `post` AS p 
     JOIN (`make` AS m, `state` AS s, `members` AS mb, `dealer` AS d) 
     ON (p.Make = m.id AND p.state = s.id AND p.id = mb.id AND mb.dealer-id = d.id) 
    WHERE p.pending != '1' 

問題是這樣的查詢只返回member.dealer-ID = dealer.id,如果我使用LEFT JOIN,將返回所有行正確的行,但表中的所有列make,state,members和dealer將爲NULL。這不應該是因爲我需要這些表中的信息。

Is there away我只能加入dealer表如果member.dealer-id是> 0?我可以在ID 0的經銷商表中添加一行,但必須有更好的方法。

+1

只是爲了更好地理解你的問題:返回沒有值而不是NULL的優點是什麼? – Andreas

+0

表中'post','make','state'和'members'的信息非常重要。只有當會員是經銷商時,包括經銷商表格info – user2636556

+0

所以唯一的解決方法是在經銷商表格中添加id = 0的行? – user2636556

回答

2

一旦你編寫你的加入以正常方式,僅在dealer表使用LEFT JOIN

SELECT * 
FROM post AS p 
JOIN make AS m ON p.Make = m.id 
JOIN state AS s ON p.state = s.id 
JOIN`members AS mb ON p.id = mb.id 
LEFT JOIN dealer AS d ON mb.dealer_id = d.id 
WHERE p.pending != '1' 

這將自動只能加入到經銷商如有member.dealer-id大於零。

順便說一句,我從來沒有見過像你之前編碼的查詢連接。如果我有,我會認爲它不會執行由於語法錯誤 - 它看起來很奇怪。

+0

謝謝!是的,你的加入看起來不那麼混亂。將牢記在心。性能明智,任何優化技巧?因爲我的郵政表可以變得相當大。現在已經是150k行了。或者這個工作是否完美? – user2636556

+0

這會表現得非常好(抱歉,如果你閱讀我以前的評論,說它會表現不佳 - 我想我是評論一個不同的答案) – Bohemian