php - 在 PHP 中从 SQL 查询结果构建 JSON 对象

标签 php mysql json

我的数据库是这样的:

enter image description here

我的目标是创建一个 SQL 查询,它将生成以下 JSON 对象:

  var data = [
        "year1":[
            "val1":[
                {"DATE":a1, "HEADER":b1, "MESSAGES":c1},
                {"DATE":a2, "HEADER":b2, "MESSAGES":c2},
                {"DATE":a6, "HEADER":b6, "MESSAGES":c6},
            ],
            "val2":[
                {"DATE":a5, "HEADER":b5, "MESSAGES":c5},
                {"DATE":a8, "HEADER":b8, "MESSAGES":c8},
            ],
        ],
        "year2":[
            "val3":[
                {"DATE":a3, "HEADER":b3, "MESSAGES":c3},
                {"DATE":a4, "HEADER":b4, "MESSAGES":c4},
                {"DATE":a7, "HEADER":b7, "MESSAGES":c7},
            ],
        ]
    ];

我已经问过类似的问题了。但是后来我没有使用“year”(所以现在有点复杂),只使用“val1”、“val2”等及其值。到目前为止,我已经试过了:

$connect = mysqli_connect("localhost", "root", "root", "Data");

$sql_year = "SELECT jaar FROM Data";
$result_year = mysqli_query($connect, $sql_year);
$data_year = array();

while ($row = mysqli_fetch_array($result_year, MYSQLI_ASSOC)) {
  $data_year[$row['jaar']][] = array(
    "maand"=> $row['maand'],
  );

  $sql_month = "SELECT * FROM Data WHERE jaar =".$row['jaar'];
  $result_month = mysqli_query($connect, $sql_month);
  $data_month = array();

  while ($row = mysqli_fetch_array($result_month, MYSQLI_ASSOC)) {
    $data_month[$row['maand']][] = array(
      "day"=> $row['day'],
      "weekday"=> $row['weekday'],
      "zaal"=> $row['zaal'],
      "stad" => $row['stad']
    );
  }
}

header('Content-Type: application/json');
echo json_encode($data_year);

最佳答案

要在 JSON 中构建这种结构,您必须使用这样的对象结构概念:

<?php  
$username='XXX';  
$password='XXX';  
$hostname = 'localhost';  
$db_name = 'stack1';

//connection string with database  
$dbhandle = mysqli_connect($hostname,$username,$password,$db_name)
or die("Unable to connect to MySQL");  


//query fire  
$result = mysqli_query($dbhandle,"select DISTINCT year from mydata;");  
$json_response = array();

$array = array();  

// fetch data in array format  
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {  

    $p_year = $row['year'];

    $result_year = mysqli_query($dbhandle,"select month from mydata where year='$p_year';");  
    while ($row = mysqli_fetch_array($result_year, MYSQLI_ASSOC)) {  

          $p_month = $row['month'];

          $result_month = mysqli_query($dbhandle,"select * from mydata where month='$p_month';"); 
          while ($row = mysqli_fetch_array($result_month, MYSQLI_ASSOC)) {
              $array[$p_year][$p_month][] = array(
               "DATE" => $row['date'],
               "HEADER" => $row['header'],
               "MESSAGE" => $row['message']
              );

          }

    }

}  

array_push($json_response,$array);
mysqli_free_result($result);
?>

关于php - 在 PHP 中从 SQL 查询结果构建 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46738864/

相关文章:

mysql - 选择平面数据成表格格式

php - 非常小的、持久的数据结构

php - 如何在 Debian 8 (Jessie) 上安装最新版本的 PHP 5.4?

php - 即使在 codeigniter 中 db 的主机名错误,也继续执行

php - 使用 htaccess 重定向/重写

php - SQL、PHP、子查询

php - Bootstrap 资源加载在 Linux 和 Windows 中不同

php - 如何从 php mysql 中的先前记录获取总计

c# - 使用空格反序列化 JSON 响应 C# 类

json - 如果内容不存在则创建包含内容的文件