डेटाबेस के साथ काम करते समय, एक-से-अनेक और अनेक-से-अनेक संबंधों का सामना करना आम बात है। ऐसे परिदृश्यों में, गो स्ट्रक्चर्स के साथ इन संबंधों की कुशल और स्केलेबल मैपिंग महत्वपूर्ण है। PostgreSQL के ऐरे एग्रीगेटर और ग्रुप बाय कार्यक्षमता। इसमें एक ऐसा दृश्य बनाना शामिल है जो एक सरणी एकत्रीकरण का उपयोग करके वस्तुओं और उनके संबंधित डेटा को एक साथ समूहित करता है। इसके बाद परिणामी दृश्य को गो स्ट्रक्चर में अनमार्शल की गई सरणी सामग्री के साथ क्वेरी किया जा सकता है।
ARRAY_AGG(ROW_TO_JSON(टैगलिस्ट.*)) AS टैगFROM
(SELECT टैग.नाम, टैग.आईडी से टैग कहाँ आइटम_आईडी = आइटम.आईडी
) एएस टैगलिस्ट
समूह द्वारा
आइटम.आईडी
`
db.MustExec(sql)
SELECT tag.name, tag.id FROM tag WHERE item_id = item.id
टाइप आइटम स्ट्रक्चर {
पंक्तियों के लिए। अगला () {
आईडी int
टैग []टैग
}
rows, err := db.Queryx("SELECT row_to_json(row) FROM (SELECT * FROM item_tags) row")var आइटम Item
var jsonString stringयदि गलती हो := पंक्तियाँ.स्कैन(&jsonString); err != nil {
if err := json.Unmarshal([]byte(jsonString), &item); त्रुटि != शून्य {
return err
}}
वापसी त्रुटि
}
आइटम = जोड़ें(आइटम, आइटम)SELECT tag.name, tag.id FROM tag WHERE item_id = item.id
SELECT tag.name, tag.id FROM tag WHERE item_id = item.id
हालांकि अनुशंसित दृष्टिकोण कुशल और बहुमुखी है, प्रश्न में उल्लिखित वैकल्पिक समाधानों की अपनी ताकत और कमजोरियां हैं :
दृष्टिकोण 1 (एकाधिक प्रश्न):
बड़े के लिए सरल लेकिन अप्रभावी डेटासेट।दृष्टिकोण 2 (मैनुअल लूपिंग):
कम मेमोरी गहन लेकिन जटिल और त्रुटि-प्रवण।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3