Musisz przemapować swoją tablicę, a następnie zainicjować tablicę dla klucza praw... więc zmień pętlę while w taki sposób:
$json_response = array();
while($row = $result->fetch_assoc()) {
if (!isset($json_response[ $row['idCategory'] ])) {
$json_response[ $row['idCategory'] ] = [
'idCategory' => $row['idCategory'],
'nameCategory' => $row['nameCategory'],
'rights' => [],
];
}
$json_response[ $row['idCategory'] ]['rights'][] = [
'idRight' => $row['rid'],
'name' => $row['rname'],
'price' => $row['price'],
'image' => $row['rimg']
];
}
// We want the final result to ignore the keys and to create a JSON array not a JSON object
$data = [];
foreach ($json_response as $element) {
$data[] = $element;
}
echo json_encode($data);
Ta część kodu $json_response[ $row_array['idCategory'] ]
pomaga zachować unikalne grupowanie danych, ponieważ tworzy skrót na podstawie idCategory. Tablica może mieć tylko jeden klucz, a ponieważ idCategory jest zawsze unikalny, możemy użyć go jako klucza do grupowania. Następnie, ponieważ mamy teraz tablicę opartą na hash, musimy utworzyć nową tablicę, która jest „rzeczywistą” tablicą dla gdy jest konwertowany na JSON. W tej sytuacji nie chcesz używać GROUP BY ani GROUP_CONCAT.