Multiple MySQL table to json_encode

后端 未结 2 1506
深忆病人
深忆病人 2021-01-18 20:56

I have 3 different tables in my database called consoleConsole, consoleModel, and consoleGame. Then what I want to do is that each con

相关标签:
2条回答
  • 2021-01-18 20:57

    Since you are using php function to encode json , it will give you the json in its default format. what you have to do is create your own function using string manipulation to get desired result.

    0 讨论(0)
  • 2021-01-18 21:17

    Ok so I have written up your solution. You have to be sure that the order by is included there because it assumes that you are ordering them with there items together. I also didnt know how your publisher was stored so I separated that out into a separate table (this will allow you to then get items by just there publisher as well), which is now 4 joins. Also on another note I have updated it to do inner joins as well. This way you will not get empty results for consoles that don't have any games assigned to them. If you want these you could simply change the joins so that it would give you those results as well. Let me know if this helps

    //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);
    
    0 讨论(0)
提交回复
热议问题