簡體   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