2010-07-29 40 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