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

MySQL वन-टू-मैनी टू JSON फॉर्मेट

यहां एक SQL क्वेरी है जो आपकी आवश्यकता को पूरा कर सकती है। यह MySQL JSON_ARRAYAGG() समग्र कार्य JSON ऑब्जेक्ट्स की एक सरणी उत्पन्न करने के लिए (जो JSON_OBJECT() )

sales . उत्पन्न करने के लिए शामिल होने के भीतर समूहीकरण का एक मध्यवर्ती स्तर किया जाता है प्रत्येक उपयोगकर्ता की JSON सरणी। फिर परिणामों को एक पंक्ति में एकत्रित किया जाता है, जिसमें एक कॉलम होता है जिसमें परिणामी JSON ऑब्जेक्ट की सरणी होती है।

SELECT
  JSON_ARRAYAGG(JSON_OBJECT('id', u.id, 'name', u.name, 'sales', s.sales))
FROM
    user u
    LEFT JOIN (
        SELECT 
            user, 
            JSON_ARRAYAGG(JSON_OBJECT('id', id, 'item', item)) sales 
        FROM sale 
        GROUP BY user
    ) s ON s.user = u.id

डीबी फिडल पर डेमो

यदि आप वापसी मान को JSON_PRETTY . के साथ लपेटते हैं , आउटपुट इस प्रकार है:

[
  {
    "id": 1,
    "name": "User 1",
    "sales": [
      {
        "id": 1,
        "item": "t-shirt"
      },
      {
        "id": 2,
        "item": "jeans"
      }
    ]
  },
  {
    "id": 2,
    "name": "User 2",
    "sales": [
      {
        "id": 3,
        "item": "sweatpants"
      },
      {
        "id": 4,
        "item": "gloves"
      }
    ]
  }
]

संपादित करें :यहां MySQL <5.7 के लिए एक (बदसूरत) समाधान है, जहां JSON समर्थन उपलब्ध नहीं है। यह केवल स्ट्रिंग मैनिपुलेशन फ़ंक्शंस पर निर्भर करता है। कृपया ध्यान दें कि यह केवल तब तक काम करेगा जब तक कि वर्चर फ़ील्ड में " . न हो चरित्र :

SELECT
    CONCAT(
        '[', 
        GROUP_CONCAT( CONCAT( '{ "id":', u.id, ', "name":"', u.name, '", "sales":', s.sales, ' }' )  SEPARATOR ', ' ),
        ']'
    )
FROM 
    user u
    LEFT JOIN (
        SELECT 
            user, 
            CONCAT( 
               '[', 
                GROUP_CONCAT( CONCAT( '{ "id":', id, ', "item":"', item, '" }' ) SEPARATOR ', '),
                ']'
            ) sales 
    FROM sale
    GROUP BY user ) s ON s.user = u.id

DB Fiddle पर डेमो




  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. MySQL विशेषक असंवेदनशील खोज (अरबी)

  4. Laravel 5 वाक्पटु के साथ CONCAT कॉलम

  5. MySQL 5.5 के बाद से BIGINT आउट-ऑफ-रेंज त्रुटि