Ok, więc napisałem twoje rozwiązanie. Musisz mieć pewność, że zamówienie według jest tam zawarte, ponieważ zakłada, że zamawiasz je razem z tymi elementami. Nie wiedziałem również, jak przechowywany jest twój wydawca, więc wydzieliłem to do osobnej tabeli (pozwoli ci to uzyskać również elementy od samego wydawcy), która jest teraz 4 sprzężeniami. Również w innej notatce zaktualizowałem go, aby robił również połączenia wewnętrzne. W ten sposób nie otrzymasz pustych wyników dla konsol, do których nie są przypisane żadne gry. Jeśli chcesz to zrobić, możesz po prostu zmienić złączenia, aby dało to również te wyniki. Daj mi znać, jeśli to pomoże
//get all of the information
$query = '
SELECT c.consoleId,c.consoleName,m.modelId,m.modelName,g.gameId,g.gameName,p.publisherId,p.publisherName
FROM `consoleconsole` c
INNER JOIN `consolemodel` m ON c.consoleId=m.consoleId
INNER JOIN `consolegame` g ON m.modelId=g.modelId
INNER JOIN `consolepublisher` p ON g.publisherId = p.publisherId
ORDER BY c.consoleName, m.modelName, g.gameName
';
//get the results
$result = mysql_query($query);
//setup array to hold information
$consoles = array();
//setup holders for the different types so that we can filter out the data
$consoleId = 0;
$modelId = 0;
//setup to hold our current index
$consoleIndex = -1;
$modelIndex = -1;
//go through the rows
while($row = mysql_fetch_assoc($result)){
if($consoleId != $row['consoleId']){
$consoleIndex++;
$modelIndex = -1;
$consoleId = $row['consoleId'];
//add the console
$consoles[$consoleIndex]['console'] = $row['consoleName'];
//setup the information array
$consoles[$consoleIndex]['information'] = array();
}
if($modelId != $row['modelId']){
$modelIndex++;
$modelId = $row['modelId'];
//add the model to the console
$consoles[$consoleIndex]['information'][$modelIndex]['model'] = $row['modelName'];
//setup the title array
$consoles[$consoleIndex]['information'][$modelIndex]['title'] = array();
}
//add the game to the current console and model
$consoles[$consoleIndex]['information'][$modelIndex]['title'][] = array(
'game' => $row['gameName'],
'publisher' => $row['publisherName']
);
}
echo json_encode($consoles);