2010-07-29 38 views
0

使用MySQL和PHP,MySQL的獲得不存在結果有附加條件

我有兩個表,我是法國人,因此表名可能聽起來不可思議, 但我想,讓他們爲原件,以避免錯誤測試時...

「樹狀」(這意味着類別)
「arborescence_domaine」(這意味着對於類別的子域)

該系統的目標是能夠在有很大的控制
蘇取決於兩件事的域名:類別和郵編。
只是解釋你之前,我潛入問題,
爲同一類,讓我們說「汽車」,
爲郵編37000的子域名將是「超級跑車」
但對於郵編93000的子域的同一類別將是例如 「the93supercars」

這就是爲什麼 「arborescence_domaine」 包含以下字段:
ID - arborescence_id - DEP - 酒莊 - statut

其中 「DEP」 是郵政編碼和 「酒莊」子域和「statut」是bool 決定子域是否被激活。

現在,有趣的部分開始了...

我想要做的是,如果可能的1個單個SQL查詢中做到這一點。 (否則,我知道成千上萬的PHP方法來實現相同的目標)。

我現在想要的是從一個給定的數組類型 和給定的郵政編碼獲取所有子域。 如果未設置子域,則它在「arborescence_domaine」表中不存在。

但我想有這樣一個結果:

CAT_ID酒莊DEP
3驅動車輛,一次37
14 IMMOBILIER 37
20 WWW NULL
26服務潛水員37
28 WWW NULL
37 WWW NULL
43 WWW NULL
3467 WWW NULL

這意味着如果沒有設置子域,它可能會返回默認的'www'值。

現在沒有郵政編碼我學會了如何做一個一汽小時前:

這是一個工作要求
SELECT a.id爲CAT_ID,IFNULL(d(所顯示的上述陣列的一個)。酒莊,包含 'www'),爲酒莊,d.DEP
FROM樹狀一個
LEFT JOIN上d.arborescence_id = a.id
WHERE一個arborescence_domaine d。id in(3,14,20,26,28,37,3467,43);

但現在與郵編我沒有得到期望的結果:

以下請求:

SELECT a.id爲CAT_ID,IFNULL(d.domaine, 'WWW')的酒莊, d.DEP
FROM樹狀一個
LEFT JOIN上d.arborescence_id = a.id
WHERE a.id在(3,14,20,26,28,37,3467,43)AND d arborescence_domaine d。 DEP = '37';

給出的結果:

CAT_ID酒莊DEP
3驅動車輛,一次37
14 IMMOBILIER 37
26服務潛水員37

好了, 「在數據庫中不存在的子域」 有走了。

現在的問題是: 是否有可能像第一個結果顯示的結果 但使用郵政編碼過濾?

(我以爲我聽錯了,但隨後出現了新的問題......一如既往...)

回答

0

d.DEP應該是你的ON子句中:

SELECT a.id as cat_id, IFNULL(d.domaine, 'www') as domaine, d.DEP 
FROM arborescence a 
LEFT JOIN arborescence_domaine d 
    ON d.arborescence_id=a.id AND d.DEP='37'AND d.status 
WHERE a.id in(3,14,20,26,28,37,3467,43); 
+0

是的! 我不知道可以在左連接中組合on子句。 你的答案是我正在尋找的。 現在我的應用程序會搖滾! 高手,感謝您分享您的知識, 現在我感覺真的更加強大;) – ling 2010-07-29 20:29:45