Mysql
 sql >> Base de données >  >> RDS >> Mysql

Table MySQL multiple à json_encode

Ok donc j'ai écrit votre solution. Vous devez être sûr que la commande par y est incluse car elle suppose que vous les commandez avec leurs articles ensemble. Je ne savais pas non plus comment votre éditeur était stocké, j'ai donc séparé cela dans une table séparée (cela vous permettra ensuite d'obtenir des éléments uniquement par l'éditeur), qui est maintenant de 4 jointures. Également sur une autre note, je l'ai mis à jour pour faire également des jointures internes. De cette façon, vous n'obtiendrez pas de résultats vides pour les consoles auxquelles aucun jeu ne leur est attribué. Si vous les voulez, vous pouvez simplement modifier les jointures pour qu'elles vous donnent également ces résultats. Faites-moi savoir si cela vous aide

//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);