आप सीधे MySQL से JSON कंटेंट जेनरेट कर सकते हैं। यहाँ एक समाधान है जो MySQL 5.7 या उच्चतर के साथ काम करता है।
एक शुरुआत के रूप में, consider function JSON_OBJECT()
, जो तालिका में प्रत्येक रिकॉर्ड के लिए एक JSON ऑब्जेक्ट उत्पन्न करता है:
SELECT
p.*,
JSON_OBJECT('id', id, 'project_name', project_name, 'parent_id', parent_id) js
FROM tbl_projects p;
आपके नमूना डेटा को देखते हुए, यह लौटाता है:
| id | project_name | parent_id | js |
| --- | ------------------- | --------- | ---------------------------------------------------------------- |
| 1 | Carmichael House | 0 | {"id": 1, "parent_id": 0, "project_name": "Carmichael House"} |
| 2 | Carmichael Kitchen | 1 | {"id": 2, "parent_id": 1, "project_name": "Carmichael Kitchen"} |
| 3 | Carmichael Bathroom | 1 | {"id": 3, "parent_id": 1, "project_name": "Carmichael Bathroom"} |
| 4 | Dowd Apartment | 0 | {"id": 4, "parent_id": 0, "project_name": "Dowd Apartment"} |
| 5 | Dowd Kitchen | 4 | {"id": 5, "parent_id": 4, "project_name": "Dowd Kitchen"} |
आपका अपेक्षित आउटपुट जेनरेट करने के लिए, हम स्वयं-JOIN
. करेंगे बच्चों के रिकॉर्ड खोजने के लिए तालिका, और एग्रीगेट फंक्शन JSON_ARRAYAGG()
आंतरिक JSON सरणी उत्पन्न करने के लिए। एकत्रीकरण का एक अतिरिक्त स्तर सब कुछ एक ही वस्तु में भर देता है। जैसा कि आपके नमूना डेटा में दिखाया गया है, मुझे लगता है कि रूट प्रोजेक्ट में parent_id = 0
. है और यह कि पदानुक्रम का केवल एक स्तर है:
SELECT JSON_OBJECT('projects', JSON_ARRAYAGG(js)) results
FROM (
SELECT JSON_OBJECT(
'id', p.id,
'project_name', p.project_name,
'parent_id', p.parent_id,
'children', JSON_ARRAYAGG(
JSON_OBJECT(
'id', p1.id,
'project_name', p1.project_name,
'parent_id', p1.parent_id
)
)
) js
FROM tbl_projects p
LEFT JOIN tbl_projects p1 ON p.id = p1.parent_id
WHERE p.parent_id = 0
GROUP BY p.id, p.project_name, p.parent_id
) x
पैदावार:
| results |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| {"projects": [{"id": 1, "children": [{"id": 2, "parent_id": 1, "project_name": "Carmichael Kitchen"}, {"id": 3, "parent_id": 1, "project_name": "Carmichael Bathroom"}], "parent_id": 0, "project_name": "Carmichael House"}, {"id": 4, "children": [{"id": 5, "parent_id": 4, "project_name": "Dowd Kitchen"}], "parent_id": 0, "project_name": "Dowd Apartment"}]} |