मेरे पास डेटा प्रकार हैं:
data ComitteeView = CommitteeView { committeeId :: CommitteeId
, committeeMembers :: [Person]
}
data CommitteesView = CommitteesView { committeeView :: [CommitteeView] }
अब, जैसा कि यह खड़ा है, मेरे पास एक स्थायी मॉडल के रूप में परिभाषित किया गया है:
Person
name Text
Committee
name Text
CommitteePerson
personId PersonId
committeeId CommitteeId
मैं बहुत आसानी से Esqueleto का उपयोग करके एक समिति दृश्य को पॉप्युलेट करने के लिए एक क्वेरी बना सकता हूं। यह कुछ इस तरह होगा:
getCommitteeView cid =
CommitteeView <$> runDB $
select $
from (person `InnerJoin` pxc `InnerJoin` committee) -> do
on (committee ^. CommitteeId ==. pxc ^. CommitteePersonCommitteeId)
on (person ^. PersonId ==. pxc ^. CommitteePersonPersonId)
where_ (committee ^. CommitteePersonCommitteeId ==. val cid)
return person
अब, आबादी की समस्या पर विचार करें CommitteesView। सिद्धांत रूप में, हमें उपरोक्त क्वेरी में उपकुंजी चलाकर पॉप्युलेट करने के लिए पर्याप्त डेटा मिलता है। ठीक है, काफी उचित है। अब मैं group bySQL में "Haskell-list" समूह का उपयोग कैसे कर सकता हूं ? मैं पंक्तियों को कैसे मोड़ सकता हूं ताकि मैं लोगों की सूची की सूची के साथ समाप्त हो सकूं?
मुझे लगता है कि esqueletoइस तरह के मामले को संभाल नहीं सकते हैं (यानी, यह एक combinator कि यह करना होगा नहीं है)। और मेरा अंतर्निहित डेटाबेस स्पष्ट रूप से एक स्तंभ के रूप में हास्केल सूचियों का समर्थन नहीं करता है। लेकिन, निश्चित रूप से, मैं इस मुद्दे का सामना करने वाला एकमात्र व्यक्ति नहीं हो सकता। एक प्रभावी रणनीति क्या है? एक n- सूची में n की सूची को तह करना? या चल रहे n+1प्रश्न? क्या कोई अन्य विकल्प भी हैं?
Data.List.groupBy?