繁体   English   中英

mysql获取带有附加条件的不存在的结果

[英]mysql get non existing results with additional conditions

使用mysql和php,

我有两个表,我是法国人,所以表名听起来可能很奇怪,但我想将它们保留为原始名称,以避免测试时出错。

“树状”(表示类别)
“ arborescence_domaine”(表示类别的子域)

该系统的目的是要能够很好地控制
取决于两个方面的子域:类别和邮政编码。
只是在我深入探讨问题之前向您解释,
对于同一个类别,我们说“汽车”,
邮政编码37000的子域将是“超级跑车”
但对于邮政编码93000,同一类别的子域将是例如“ the93supercars”

因此,“ arborescence_domaine”包含以下字段:
id-arborescence_id-DEP-域-状态

其中“ DEP”是邮政编码,“ domaine”是子域,“ statut”是布尔值,用于确定是否激活了子域。

现在,有趣的部分开始了……

我想做的是如果可能的话,在1个单个sql查询中执行此操作。 (否则,我知道成千上万个实现相同目标的php方法)。

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

但我想要这样的结果:

cat_id域DEP
3辆37
14防盗37
20 www空
26服务潜水员37
28 www空
37 www空
43 www空
3467 www空

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

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

这是一个工作请求(显示上述数组的请求)
SELECT a.id作为cat_id,IFNULL(d.domaine,'www')作为domaine,d.DEP
从树突
d.arborescence_id = a.id上的左联接arborescence_domaine d
a.id in(3,14,20,26,28,37,3467,43);

但是现在用邮政编码我没有得到预期的结果:

以下要求:

SELECT a.id作为cat_id,IFNULL(d.domaine,'www')作为domaine,d.DEP
从树突
d.arborescence_id = a.id上的左联接arborescence_domaine d
其中a.id in(3,14,20,26,28,37,3467,43) 和d.DEP = '37' ;

给出以下结果:

cat_id域DEP
3辆37
14防盗37
26服务潜水员37

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

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

(我以为我知道了,但是随后出现了一个新问题……一如既往……)

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM