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

MySQL क्रमपरिवर्तन

प्रत्येक अतिरिक्त बंडल में हो सकता है या नहीं, जिससे यह एक द्विआधारी गुण बन जाता है।
संयोजन की कल्पना करने का एक तरीका प्रत्येक अतिरिक्त के लिए एक बिट के साथ एक शब्द बनाना है, 1 इसका मतलब है कि अतिरिक्त सूची में है, 0 इसका मतलब है कि यह नहीं है।
उदाहरण के लिए Bench + undershelf + overshelf 110 है (या 011 यदि बाइनरी स्ट्रिंग को विपरीत क्रम में पढ़ा जाता है)

n बिट के प्रत्येक संयोजन को उत्पन्न करने से n अतिरिक्त का प्रत्येक संयोजन मिलेगा, यह 0 से प्रत्येक संख्या भी देगा से 2^n - 1 . तक .

हम यहां से वापस काम कर सकते हैं:
1. 0 . से नंबरों की सूची बनाएं से 2^n - 1 . तक;
2. अतिरिक्त के संयोजन को सूचीबद्ध करने के लिए संख्या को बाइनरी में बदलें
3. हर बिट को एक अतिरिक्त
4 के साथ मिलाएं। बंडल विवरण में अतिरिक्त के नाम संयोजित करें।

SELECT CONCAT(b.Name
            , COALESCE(CONCAT(' + '
                            , GROUP_CONCAT(x.Name SEPARATOR ' + '))
                     , '')) Combination
FROM   (SELECT p.Name, p.id
                     , LPAD(BIN(u.N + t.N * 10), e.Dim, '0') bitmap
                FROM   Products p
                       CROSS JOIN (SELECT 0 N UNION ALL SELECT 1 
                         UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
                         UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
                         UNION ALL SELECT 8 UNION ALL SELECT 9) u
                       CROSS JOIN (SELECT 0 N UNION ALL SELECT 1 
                         UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
                         UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
                         UNION ALL SELECT 8 UNION ALL SELECT 9) t
                       INNER JOIN (SELECT COUNT(1) Dim
                                       , `Parent ID` pID
                                   FROM Extra) E ON e.pID = p.ID
                WHERE  u.N + t.N * 10 < Pow(2, e.Dim)
       ) B
       LEFT  JOIN (SELECT @rownum := @rownum + 1 ID
                        , `Parent ID` pID
                        , Name
                   FROM   Extra
                        , (Select @rownum := 0) r) X
                          ON x.pID = b.ID
                         AND SUBSTRING(b.bitmap, x.ID, 1) = '1'
GROUP BY b.Name, b.bitmap

यह क्वेरी छह अतिरिक्त तक काम करेगी, फिर इसके लिए एक और अंक तालिका की आवश्यकता होगी (प्रत्येक तीन अतिरिक्त में एक अंक)।

यह कैसे काम करता है

सबक्वेरी E अतिरिक्त की संख्या की गणना करें, इसका उपयोग C . में किया जाता है अंक तालिका द्वारा उत्पन्न तत्वों को सीमित करने के लिए u और t (इकाई और दहाई) से 2^मंद।

संख्या को BIN(u.N + t.N * 10) . द्वारा बाइनरी में बदल दिया जाता है , फिर तत्वों की संख्या के लिए '0' के साथ गद्देदार छोड़ दिया, एक संयोजन बिटमैप उत्पन्न कर रहा है।

जेनरेट किए गए बिटमैप का उपयोग करने के लिए प्रत्येक अतिरिक्त को एक नकली आईडी की आवश्यकता होती है जो उसमें एक स्थिति से मेल खाती है, यही सबक्वेरी X है के लिए है।

दो उपश्रेणियाँ हैं JOIN बिटमैप के nवें चार द्वारा एड:यदि चार 1 है तो अतिरिक्त बंडल में है, LEFT अतिरिक्त के बिना उत्पाद को नहीं खोलने के लिए शामिल हुए।



  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. mysql टेबल के बिना तिथियों का चयन करें

  3. Jquery html और php . का उपयोग करके डेटाबेस में टैग कैसे डालें?

  4. यदि MySQL में फ़ील्ड रिक्त है तो 0 लौटें

  5. डेटाटाइम बनाम दिनांक और समय Mysql