प्रश्न में MySQL का उल्लेख है, और वास्तव में इस प्रकार की समस्या के लिए इस DBMS का एक विशेष कार्य है:GROUP_CONCAT(expr)
. MySQL संदर्भ में एक नज़र डालें समूह-दर-कार्यों पर मैनुअल
. फ़ंक्शन को MySQL संस्करण 4.1 में जोड़ा गया था। आप GROUP BY FileID
using का उपयोग करेंगे क्वेरी में।
मैं वास्तव में इस बारे में निश्चित नहीं हूं कि आप परिणाम को कैसे देखना चाहते हैं। यदि आप प्रत्येक आइटम के लिए सूचीबद्ध प्रत्येक विशेषता चाहते हैं (भले ही सेट न हो), तो यह कठिन होगा। हालांकि, इसे कैसे करना है, इसके लिए यह मेरा सुझाव है:
SELECT bt.FileID, Title, Author,
GROUP_CONCAT(
CONCAT_WS(':', at.AttributeName, at.AttributeType, avt.AttributeValue)
ORDER BY at.AttributeName SEPARATOR ', ')
FROM BaseTable bt JOIN AttributeValueTable avt ON avt.FileID=bt.FileID
JOIN AttributeTable at ON avt.AttributeId=at.AttributeId
GROUP BY bt.FileID;
यह आपको सभी विशेषताओं को एक ही क्रम में देता है, जो उपयोगी हो सकता है। आउटपुट निम्न जैसा होगा:
'F001', 'Dox', 'vinay', 'CustomAttr1:varchar(40):Akash, CustomUseDate:Datetime:2009/03/02'
इस तरह आपको केवल एक ही डीबी क्वेरी की आवश्यकता है, और आउटपुट को पार्स करना आसान है। यदि आप डीबी में विशेषताओं को वास्तविक डेटाटाइम आदि के रूप में संग्रहीत करना चाहते हैं, तो आपको गतिशील एसक्यूएल का उपयोग करने की आवश्यकता होगी, लेकिन मैं इससे स्पष्ट रहूंगा और मूल्यों को वर्चर्स में संग्रहीत करूंगा।