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

JSON को कॉलम डेटा में कैसे डालें यदि उप-क्वेरी MySQL में 1 से अधिक पंक्ति लौटाती है

थोड़ा जटिल, लेकिन आप प्रत्येक पंक्ति के लिए JSON ऑब्जेक्ट बना सकते हैं, उन्हें GROUP_CONCAT का उपयोग करके संयोजित कर सकते हैं और परिणाम कास्ट करें ([] . में लिपटे हुए इसे एक सरणी बनाने के लिए) JSON को;

SELECT u.uid, u.username, 
  CASE WHEN p.uid IS NULL 
       THEN NULL 
       ELSE CAST(CONCAT('[',
                   GROUP_CONCAT(JSON_OBJECT('pid', p.pid,
                                            'title', p.title, 
                                            'status', p.status)),     
                 ']') AS JSON) END portfolios
FROM user u
LEFT JOIN portfolio p
  ON u.uid=p.uid
WHERE p.status = 1
GROUP BY u.uid, u.username;

...जो देता है...

+------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+
|    1 | manoj    | [{"pid": 1, "title": "title 1", "status": 1}, {"pid": 2, "title": "title 2", "status": 1}, {"pid": 3, "title": "title 3", "status": 1}] |
|    2 | testing  | [{"pid": 4, "title": "title 1", "status": 1}]                                                                                           |
|    3 | user     | NULL                                                                                                                                    |
|    4 | company  | NULL                                                                                                                                    |
+------+----------+-----------------------------------------------------------------------------------------------------------------------------------------+

यदि आप JSON समर्थन के बिना पुराने MySQL का उपयोग कर रहे हैं, तो आप इसे एक स्ट्रिंग के रूप में बना सकते हैं;

SELECT u.uid, u.username, 
  CASE WHEN p.uid IS NULL
  THEN NULL 
  ELSE CONCAT('[', 
    GROUP_CONCAT(CONCAT('{ "pid":',p.pid,',"title":"', REPLACE(p.title, '"', '\\"'),
           '","status":',p.status, ' }')), ']') END portfolios
FROM user u 
LEFT JOIN portfolio p 
  ON u.uid=p.uid AND p.status=1
GROUP BY u.uid, u.username;

...जो आपको देगा...

+------+----------+------------------------------------------------------------------------------------------------------------------------------+
| uid  | username | portfolios                                                                                                                   |
+------+----------+------------------------------------------------------------------------------------------------------------------------------+
|    1 | manoj    | [{ "pid":2,"title":"title 2","status":1 },{ "pid":3,"title":"title 3","status":1 },{ "pid":1,"title":"title 1","status":1 }] |
|    2 | testing  | [{ "pid":4,"title":"title 1","status":1 }]                                                                                   |
|    3 | user     | NULL                                                                                                                         |
|    4 | company  | NULL                                                                                                                         |
+------+----------+------------------------------------------------------------------------------------------------------------------------------+


  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 अलग-अलग तालिकाओं से योग जोड़ना

  2. BLOB/TEXT कॉलम 'वैल्यू' बिना कुंजी लंबाई के कुंजी विनिर्देश में उपयोग किया जाता है

  3. MySQL डेटाबेस में पूर्णांकों के अग्रणी शून्य को INTEGER के रूप में संग्रहीत करना

  4. क्या हटाई गई पंक्तियों द्वारा कब्जा किए गए स्थान का पुन:उपयोग किया जाता है?

  5. डुप्लिकेट के बिना mysql concat_ws