Я очень новичок в 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