【发布时间】:2016-03-08 12:12:53
【问题描述】:
我正在尝试构建产品及其选项的兼容性系统。 每个产品都存在多个版本,每个版本都有自己的规格。 每个选项也有自己的一套规范
表关系如下
Edition | - < editionspec > - | Specification
Option | - < optionspec > - | Specification
editionspec 是这样填写的
Edition | Specification
2 | 1
2 | 5
2 | 13
3 | 1
3 | 5
3 | 12
optionspec 是这样填充的
Option | Specification
1 | 1
1 | 5
1 | 12
2 | 1
2 | 5
2 | 12
3 | 12
8 | 1
8 | 5
8 | 13
9 | 13
在这种情况下,我搜索与第 3 版兼容的选项。
- 选项 1 有效,因为 1、5 和 12 匹配
- 选项 2 有效,因为 1、5 和 12 匹配
- 选项 3 有效,因为 12 匹配且 1 和 5 为空
- 选项 8 无效,因为 1 和 5 匹配,但 13 也不属于选项 8。
!一些背景信息,但我认为它与解决方案无关。
- 1 在长度规范的组中(id:1)(组包含 id 的 1、2、3 和 4)
- 5 在高度规范组中(id:2)(组包含 id 的 1、2、3、4 和 5)
- 12 和 12 属于座椅规格组 (id: 3)(组包含 ids 12 和 13)
到目前为止我的查询:
SELECT `o`.* FROM `option` AS `o`
LEFT JOIN `optionspec` AS `os` ON o.id = os.option
LEFT JOIN `specification` AS `s` ON os.specification = s.id
LEFT JOIN `editionspec` AS `es` ON s.id = es.specification
LEFT JOIN `edition` AS `e` ON es.edition = e.id
LEFT JOIN `productcompatibility` AS `pc` ON o.id = pc.option
LEFT JOIN `product` AS `p` ON pc.product = p.id
LEFT JOIN `edition` AS `e2` ON p.id = e2.product
LEFT JOIN `optiongroup` AS `og` ON o.group = og.id
WHERE (e.id = 3 or e.id IS NULL)
AND (e2.product = p.id or e2.product IS NULL)
AND (og.id = 1)
GROUP BY `o`.`id`
我怎样才能使这个查询正确? 它现在检查是否可以找到任何规范。但它必须检查版本的每个规范组是否合格且正确或为空。
【问题讨论】: