I have 2 MySQL tables,let's call it kj which is the parent of jj as the children table. Currently, I have the SQL query written in my NodeJS code to return this output:
[{
"id_kj": 1,
"title_kj": "title1",
"description_kj": "description1",
"image_kj": "image1",
"id_jj": 66,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
},
{
"id_kj": 1,
"title_kj": "title1",
"description_kj": "description1",
"image_kj": "image1",
"id_jj": 67,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
},
{
"id_kj": 1,
"title_kj": "title1",
"description_kj": "description1",
"image_kj": "image1",
"id_jj": 68,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
},
{
"id_kj": 2,
"title_kj": "title2",
"description_kj": "description2",
"image_kj": "image2",
"id_jj": 71,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
},
{
"id_kj": 2,
"title_kj": "title2",
"description_kj": "description2",
"image_kj": "image2",
"id_jj": 69,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
},
{
"id_kj": 2,
"title_kj": "title2",
"description_kj": "description2",
"image_kj": "image2",
"id_jj": 70,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
},
{
"id_kj": 3,
"title_kj": "title3",
"description_kj": "description3",
"image_kj": "image3",
"id_jj": 72,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
},
{
"id_kj": 3,
"title_kj": "title3",
"description_kj": "description3",
"image_kj": "image3",
"id_jj": 73,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
},
{
"id_kj": 3,
"title_kj": "title3",
"description_kj": "description3",
"image_kj": "image3",
"id_jj": 74,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
}
]
How do I make the result nested? I need id_jj, title_jj, description_jj, image_jj to be the children of each id_kj key. Here are the result I need it to be:
[{
"id_kj": 1,
"title_kj": "title1",
"description_kj": "description1",
"image_kj": "image1",
"children": [{
"id_jj": 66,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
},
{
"id_jj": 67,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
},
{
"id_jj": 68,
"title_jj": "title1",
"description_jj": "description1",
"image_jj": "image1"
}
]
},
{
"id_kj": 2,
"title_kj": "title2",
"description_kj": "description2",
"image_kj": "image2",
"children": [{
"id_jj": 71,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
},
{
"id_jj": 69,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
},
{
"id_jj": 70,
"title_jj": "title1",
"description_jj": "description2",
"image_jj": "image2"
}
]
},
{
"id_kj": 3,
"title_kj": "title3",
"description_kj": "description3",
"image_kj": "image3",
"children": [{
"id_jj": 72,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
},
{
"id_jj": 73,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
},
{
"id_jj": 74,
"title_jj": "title3",
"description_jj": "description3",
"image_jj": "image3"
}
]
}
]
And here's my code:
const getData = async function() {
return new Promise(function(resolve) {
const query = "SELECT a.`id` AS 'id_kj', a.`title` AS 'title_kj', a.`description` AS 'description_kj', a.`image` AS 'image_kj',\n" +
"b.`id` AS 'id_jj', b.`title` AS 'title_jj', b.`description` AS 'description_jj', b.`image` AS 'image_jj' FROM `kj` AS a LEFT JOIN `jj` AS b\n" +
"ON a.`id` = b.`id_kj` GROUP BY a.`id`, b.`id` ORDER BY a.`title` ASC, b.`title` DESC";
con.query(query, function(error, results) {
if (results.length > 0) {
resolve(results);
} else {
resolve(null);
}
});
});
};
module.exports = {
getNestedData: async function(baseResponse) {
const data = await getPelatihan();
return data;
},
};
I've also created the SQL Fiddle scheme of my tables, here's the fiddle link: db-fiddle
Any help will be much appreciated
Thank you