繁体   English   中英

使用复合设计模式对数据库进行mysql查询

[英]mysql query on database using composite design pattern

我不是SQL专家,因此在设计mysql查询以查询使用“复合设计模式”设计的数据库表时遇到麻烦。

这些表是:

复合材料:id,名称,类型[类型为“条件”或“条件组”]

Composites_properties:id,composite_id,property_id

分组:id,parent_id,child_id

属性:id,键,值

我想做的是生成一个查询,该查询将返回组(“ ConditionGroup”)成员条件(“ Condition”)的唯一属性,这样我最终得到一个组名和一个属性键列表(从成员继承)条件)。

我想出的最好的是:

SELECT DISTINCT properties.`key`, composites.name  
FROM composites, composites_properties, properties  
WHERE composites.id=composites_properties.composite_id
AND properties.id=composites_properties.property_id  
AND composites.id IN (
    SELECT child_id FROM groupings WHERE parent_id IN
        (SELECT id FROM composites WHERE type='ConditionGroup')
    )

这将产生每个成员条件及其属性列表,如果一个以上成员条件具有该属性,则重复该属性。

最后,我想:

组名

  • property_1

  • property_2

  • property_3

但是我得到以下类型列表(没有指示条件属于哪个组)

条件名称1 property_1

条件名称1 property_2

条件名称1 property_3

条件名称2 property_1

条件名称2 property_2

条件名称3 property_1

条件名称3 property_2

有什么建议么?

老实说,我不清楚您要完成的目标,但我会给您一个机会。 如果您可以弄清楚该查询无法满足您的要求,那么我可能会进一步提供帮助。

SELECT      c.name, p.key
FROM        composites c
INNER JOIN  groupings g ON c.id = g.parent_id
INNER JOIN  composites_properties cp ON cp.composite_id = g.child_id
INNER JOIN  properties p ON p.id = cp.property_id
WHERE       c.type = 'ConditionGroup'

对我来说,这似乎不是世界上最好的查询,因为它忽略了每个分组中的子代实际是什么,因此我不确定这是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM