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

एक क्रमबद्ध डेटा के साथ दो कॉलम कैसे जुड़ें?

MySQL नहीं जानता कि PHP क्रमांकन क्या है। आप निम्न प्रारूप में श्रेणियों की आईडी को एक स्ट्रिंग के रूप में संग्रहीत कर सकते हैं:

2,4,5,10,...

फिर, SUBSTRING_INDEX() के संयोजन का उपयोग करें और FIND_IN_SET() MySQL categories.id के अस्तित्व की जांच करने के लिए कार्य करता है ecommerce_products.catid . में :

SUBSTRING_INDEX(
    SUBSTRING_INDEX(ecommerce_products.catid,
        ',',
        FIND_IN_SET(categories.id, ecommerce_products.catid)
), ',', -1)

प्रत्येक उत्पाद रिकॉर्ड के लिए श्रेणियों के शीर्षक का चयन करने के लिए, हमें शीर्षकों को GROUP_CONCAT() फ़ंक्शन, तो अंतिम क्वेरी कुछ इस तरह होगी:

SELECT p.id,
       p.catid
       GROUP_CONCAT(cat.title ORDER BY cat.id SEPARATOR '|') as 'categories',
       p.manid,
       p.name
FROM ecommerce_products AS p
LEFT JOIN categories AS cat
    ON cat.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.catid, ',', FIND_IN_SET(cat.id, p.catid)), ',', -1)
-- more query...
GROUP BY p.id; -- Group the result to concatenate the categories titles

इस दृष्टिकोण में, आपको $this->db->query(); क्वेरी को मैन्युअल रूप से चलाने की विधि।

नोट:
एक विकल्प के रूप में, आप ON के लिए निम्न का उपयोग कर सकते हैं कथन:

LEFT JOIN categories AS cat
    ON p.catid REGEXP CONCAT('[,]{0,1}', cat.id, '[,]{0,1}')

टेस्ट-केस

यहाँ SQLFiddle पर मेरा परीक्षण-मामला है। :

SELECT p.id,
       p.name,
       GROUP_CONCAT(c.title ORDER BY c.id SEPARATOR '|') as 'categories'
FROM products as p
JOIN categories as c
  ON c.id = SUBSTRING_INDEX(SUBSTRING_INDEX(p.cat_id, ',', FIND_IN_SET(c.id, p.cat_id)) , ',', -1)
GROUP BY p.id;

परिणाम:

ID    NAME          CATEGORIES
--    ---------     -----------
1     Product 1     Cat 1|Cat 3
2     Product 2     Cat 2|Cat 4
3     Product 3     Cat 1|Cat 4
4     Product 4     Cat 2|Cat 3


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MySQL एकाधिक प्रपत्र और एकल पृष्ठ पर एकाधिक सबमिट

  2. मैसकल रेगुलर एक्सप्रेशन बिना किसी दोहराए जाने वाले वर्णों के साथ खोज करता है

  3. त्रुटि:MySQL अप्रत्याशित रूप से बंद हो गया। Xampp . पर मैसकल शुरू करने की कोशिश करते समय

  4. कई लेफ्ट जॉइन के साथ MySQL क्वेरी को ऑप्टिमाइज़ करना

  5. कई-से-अनेक संबंधों के साथ कई तालिकाओं में जेपीए क्वेरी