【问题标题】:mysql get non existing results with additional conditionsmysql 在附加条件下获得不存在的结果
【发布时间】:2010-07-29 19:26:10
【问题描述】:

使用mysql和php,

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

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

这个系统的目的是能够有很好的控制
在取决于两件事的子域上:类别和邮政编码。
只是在我深入研究问题之前向您解释一下,
对于同一类别,假设“汽车”,
对于邮政编码 37000,子域将是“supercars”
但是对于邮政编码 93000,同一类别的子域将是例如“the93supercars”

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

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

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

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

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

但我想要这样的结果:

cat_id 域 DEP
3 车辆-场合 37
14 防盗器 37
20 万维网 NULL
26 服务-潜水员 37
28 万维网 NULL
37 www 空
43 www 空
第3467章

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

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

这是一个有效的请求(显示上述数组的请求)
选择 a.id 作为 cat_id,IFNULL(d.domaine, 'www') 作为 domaine,d.DEP
FROM 乔木 a
在 d.arborescence_id=a.id
上 LEFT JOIN arborescence_domained WHERE a.id in(3,14,20,26,28,37,3467,43);

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

以下请求:

选择 a.id 作为 cat_id,IFNULL(d.domaine, 'www') 作为 domaine,d.DEP
FROM 乔木 a
在 d.arborescence_id=a.id
上 LEFT JOIN arborescence_domained WHERE a.id in(3,14,20,26,28,37,3467,43) AND d.DEP='37';

给出以下结果:

cat_id 域 DEP
3 车辆-场合 37
14 防盗器 37
26 服务-潜水员 37

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

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

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

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    【讨论】:

    • 是的!我不知道可以在左连接中组合 on 子句。你的答案就是我要找的那个。现在我的应用程序要摇滚了!师父,谢谢你分享你的知识,我现在感觉真的更强大了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多