【发布时间】: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
好吧,“在数据库中不存在子域”已经消失了。
现在的问题是: 是否有可能得到像显示的第一个结果一样的结果, 但是使用邮政编码过滤?
(我以为我明白了,但后来出现了一个新问题......一如既往......)
【问题讨论】: