Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक MySQL इकाई-विशेषता-मूल्य स्कीमा को कैसे पिवट करें

प्रश्न में 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'

इस तरह आपको केवल एक ही डीबी क्वेरी की आवश्यकता है, और आउटपुट को पार्स करना आसान है। यदि आप डीबी में विशेषताओं को वास्तविक डेटाटाइम आदि के रूप में संग्रहीत करना चाहते हैं, तो आपको गतिशील एसक्यूएल का उपयोग करने की आवश्यकता होगी, लेकिन मैं इससे स्पष्ट रहूंगा और मूल्यों को वर्चर्स में संग्रहीत करूंगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सम्मिलित करें ... डुप्लीकेट कुंजी पर (कुछ न करें)

  2. Prometheus और ClusterControl के साथ अपने ProxySQL की निगरानी कैसे करें

  3. MySQL में पिछले एक महीने का डेटा कैसे प्राप्त करें

  4. MySQL में सेलेक्ट से कैसे डिलीट करें?

  5. Node.js और Express के साथ अपना पहला API कोड करें:एक डेटाबेस कनेक्ट करें