mysql在附加条件下获得不存在的结果

时间:2010-07-29 19:26:10

标签: php mysql

使用mysql和php,

我有两张桌子,我是法国人所以桌面名称可能听起来很奇怪, 但我想保留它们作为原件,以避免测试时出现错误...

“arborescence”(表示类别)
“arborescence_domaine”(表示类别的子域名)

该系统的目的是能够有很好的控制权 在依赖于两件事的子域上:类别和邮政编码 在我深入研究这个问题之前,先解释一下你 对于同一类别,让我们说“汽车”,
对于邮政编码37000,子域名将是“超级跑车” 但对于邮政编码93000,同一类别的子域名将为“the93supercars”

这就是“arborescence_domaine”包含以下字段的原因:
id - arborescence_id - DEP - domaine - statut

其中“DEP”是zipcode,“domaine”是子域名,“statut”是bool 决定子域是否被激活。

现在,有趣的部分开始......

我想做的是尽可能在1个单一的SQL查询中完成。 (否则,我知道成千上万的php方法可以达到同样的目标)。

我现在想要的是从给定的类别数组中获取所有子域名 和给定的邮政编码。 如果未设置子域,则“arborescence_domaine”表中不存在该子域。

但我希望得到像这样的结果:

cat_id domaine DEP
3车辆场合37
14固定器37
20 www NULL
26个服务 - 潜水员37
28 www NULL
37 www NULL
43 www NULL
3467 www NULL

这意味着如果未设置子域,则可能会返回默认的“www”值。

现在没有邮政编码,我学会了如何在一个小时前做到这一点:

这是一个工作请求(显示上述数组的请求)
将a.id选为cat_id,将IFNULL(d.domaine,'www')选为domaine,d.DEP
从arborescence a
LEFT JOIN arborescence_domaine d on d.arborescence_id = a.id
在(3,14,20,26,28,37,3467,43)中的a。

但现在使用zipcode我没有得到预期的结果:

以下要求:

将a.id选为cat_id,将IFNULL(d.domaine,'www')选为domaine,d.DEP
从arborescence a
LEFT JOIN arborescence_domaine d on d.arborescence_id = a.id
(3,14,20,26,28,37,3467,43) AND d.DEP ='37';

给出以下结果:

cat_id domaine DEP
3车辆场合37
14固定器37
26个服务 - 潜水员37

好吧,“在数据库中不存在子域名”已经消失了。

现在的问题是: 是否有可能得到如第一个结果所示的结果, 但使用邮政编码过滤?

(我以为我明白了,但随后出现了一个新问题......一如既往......)

1 个答案:

答案 0 :(得分: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);