0
我正在嘗試構建產品及其選項的兼容性系統。 每個產品都有多個版本,並有各自的規格。 每個選項也有他們自己的一套規範sql加入等於數組
表關係作爲跟隨
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是bacause 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`
我如何使這個查詢正確?它現在檢查它是否可以找到任何規格。但它必須檢查版本的每個specgroup是否是合格的,正確的或爲空。
Click here for Database design
JEP這之後的語法一些小的修改工作。最終結果如下: WHERE(e.id = 3或e.id IS NULL) AND(e2.product = p.id或e2.product IS NULL) AND(SELECT GROUP_CONCAT(os.specification, ',')= (GROUP_CONCAT(es.specification,','))) AND(og.id = 1)' – IMarks