Skip to content
Advertisement

how do I get nested pojo result from php mysql

How to get nested pojo result like this one,

object
------object
------object
------------object
------array

This is I got from somewhere I forgot, but it has no code for make this result.

{
  "success": true,
  
  "counter": {
    "pending": 100,
    "rejected": 200,
    "completed": 300,
    "expired": 400,
    "total": 3200
  },
  "pie_statistics": {
    "assigned": 120,
    "opened": 212,
    "in-progress": 100,
    "completed": 320,
    "done": 433,
    "rejected": 111,
    "expired": 332
  },
  
  "bar_months":[
  "jan",
  "feb",
  "mar"
],
  
  "bar_pending":[
    100,
    200,
    300
  ],
  
   "bar_rejected":[
    140,
    220,
    340
  ],
  
  
   "bar_completed":[
    170,
    290,
    310
  ]
  
}

with my code like this

<?php 

require "connection.php";

$query =    "SELECT a.kondisi, k.area, COUNT(k.area) AS carea, COUNT(k.nrp) AS cnrp
            FROM tb_absens AS a
            INNER JOIN tb_karyawans AS k 
            ON a.nrp = k.nrp
            WHERE a.kondisi = 'Sehat' 
            GROUP BY k.area";

$data = mysqli_query($conn, $query);
$json_array = array();

while($row = mysqli_fetch_array($data)){
    array_push($json_array, array(
        "success"   =>  true,
        "cnrp"      =>  $row["cnrp"],
        "area"      =>  $row["area"],
        "kondisi"   =>  $row["kondisi"],
    ));
}

echo json_encode($json_array);

the result of mine like this

[
{
    "success": true,
    "cnrp": "1",
    "area": "Administrator",
    "kondisi": "Sehat"
},
{
    "success": true,
    "cnrp": "2",
    "area": "AMK CPBP",
    "kondisi": "Sehat"
},..
]

Yeah I know it’s somekind old question, with many of questions similiar to. But I have no clue at all. I appreciate any help. Thanks.

Advertisement

Answer

If you want to get different json type into single json, you can split query first, and you execute each of query. To get nested object result like this

"counter": {
    "pending": 100,
    "rejected": 200,
    "completed": 300,
    "expired": 400,
    "total": 3200
  },

try execute

while($row = mysqli_fetch_assoc($data)){

    $json_arr['counter'][$row['a']] = $row['b'];
       
}

for nested array

"bar_months":[
  "jan",
  "feb",
  "mar"
]

use this

 while($row = mysqli_fetch_assoc($data)){
        $json_arr2['bar_months'][] = $row_area['months'];
 }

and to merge it to single json you can use

echo json_encode(array_merge($json_arr, $json_arr2));

Hope it can helps

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement