使用mysql和php,
我有两张桌子,我是法国人所以桌面名称可能听起来很奇怪, 但我想保留它们作为原件,以避免测试时出现错误...
该系统的目的是能够有很好的控制权
在依赖于两件事的子域上:类别和邮政编码
在我深入研究这个问题之前,先解释一下你
对于同一类别,让我们说“汽车”,
对于邮政编码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
好吧,“在数据库中不存在子域名”已经消失了。
现在的问题是: 是否有可能得到如第一个结果所示的结果, 但使用邮政编码过滤?
(我以为我明白了,但随后出现了一个新问题......一如既往......)
答案 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);