Получение только одного результата при создании вложенного JSON из MYSQL PHP - PullRequest
2 голосов
/ 14 февраля 2020

Я очень новичок в mysql и php.

Так что я делаю 2 sql запросов и связываю их вместе с kampid как из обоих запросов.

все находится в одной и той же таблице, а не в разных, поэтому, что я знаю, я не могу



            $array1 = array();
            $array2 = array();

            $sql = "select r.kampid, q.trade from (
            select kampid
            from posts where kampid != 0
            group by kampid
            ) r
            join
            (
             select p.kampid, p.trade
             from
             (
              select kampid, trade, count(*) as cnt
              from posts
              group by kampid, trade
              ) p
             join
             (
              select kampid, max(cnt) as maxcnt
              from (
                    select kampid, trade, count(*) as cnt
                    from posts
                    group by kampid, trade) x
              group by kampid) y
             on y.kampid = p.kampid and y.maxcnt = p.cnt
             ) q
            on r.kampid = q.kampid";

            //prepare statement
            $statement = $this->conn->prepare($sql);

            //catch error
            if (!$statement){
                throw new Exception($statement->error);
            }
            $statement->execute();

            //result we got in execution
            $result = $statement->get_result();

            // each line append to array new row one by one when it is found
            while ($row = $result->fetch_assoc()){



               // $array1[$row["kampid"]][] = array( $row['trade'] );
                $array1['kampid'] = $row['kampid'];
                $array1['trade'] = array($row['trade']);
                $array1['department'] = array();






                $sql2 = "SELECT COUNT(posts.companyName) AS companies,
                posts.kampid, posts.department, SUM(posts.people)AS total
                           FROM posts WHERE kampid = '".$row['kampid']."' GROUP BY posts.department, posts.kampid ORDER BY posts.kampid, posts.department ASC";

                           //prepare statement
                           $statement = $this->conn->prepare($sql2);

                           //catch error
                           if (!$statement){
                               throw new Exception($statement->error);
                           }
                           $statement->execute();
                           //result we got in execution
                           $result = $statement->get_result();

                while ($row2 = $result->fetch_assoc()){



                    $array2['department'] = $row2['department'];
                    $array2['companies'] = $row2['companies'];
                    $array2['total'] = $row2['total'];
                    array_push($array1[department], $array2);



                      }



            }


            $output_arr = array();
            array_push($output_arr, $array1);

            $jsonData = json_encode($output_arr, JSON_PRETTY_PRINT);


echo $jsonData; 

        }

, и я получаю этот вывод:

[
  {
    "kampid": 1901,
    "trade": [
      "Åkeri"
    ],
    "department": [
      {
        "department": 3,
        "companies": 8,
        "total": 63
      },
      {
        "department": 4,
        "companies": 38,
        "total": 114
      }
    ]
  }
]

, но json останавливается после первого "kampid", когда есть больше "kampid" 1902, 1903 и т. д. c

результат, который я хочу получить, следующий:


[
  {
    "kampid": 1901,
    "trade": [
      "Truck"
    ],
    "department": [
      {
        "department": 3,
        "companies": 8,
        "total": 63
      },
      {
        "department": 4,
        "companies": 38,
        "total": 114
      }
    ]
  },
{
    "kampid": 1902,
    "trade": [
      "Mechanic"
    ],
    "department": [
      {
        "department": 3,
        "companies": 8,
        "total": 63
      },
      {
        "department": 4,
        "companies": 38,
        "total": 114
      }
    ]
  },
{
    "kampid": 1903,
    "trade": [
      ""
    ],
    "department": [
      {
        "department": 3,
        "companies": 8,
        "total": 63
      },
      {
        "department": 4,
        "companies": 38,
        "total": 114
      }
    ]
  }
]

Может кто-нибудь указать, что я делаю неправильно?

РЕДАКТИРОВАТЬ: получил ответ на перемещение "array_pu sh ($ output_arr, $ array1);" внутри внешнего l oop, но для получения результата мне нужно было переименовать второй $ result и $ Statement

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...