Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在SQL查询中进行两次分组,并导出为JSON_Mysql_Sql_Json - Fatal编程技术网

Mysql 如何在SQL查询中进行两次分组,并导出为JSON

Mysql 如何在SQL查询中进行两次分组,并导出为JSON,mysql,sql,json,Mysql,Sql,Json,这里有一个csv格式的示例,是我的mySQL存储 trek_id, number, name, value, units, userID, deviceID, lat , lng -------------------------------------------------------------------------------- 88, 4, Hum , 720, PPB , 96, 1, 40.0215268, -105

这里有一个csv格式的示例,是我的mySQL存储

trek_id, number, name, value, units, userID, deviceID, lat        , lng
--------------------------------------------------------------------------------
     88,      4, Hum ,   720, PPB  ,     96,         1, 40.0215268, -105.2177324
     88,      4, PM10,   720, PPB  ,     96,         1, 40.0215268, -105.2177324
     88,      6, Pres,   730, PPB  ,     96,         1, 40.0215299, -105.2177096
     88,      6, PM10,   730, PPB  ,     96,         1, 40.0215299, -105.2177096
所以一个trek_id有多个数值,每个数值都包含多个测量值。我很想知道如何查询它,以便最终插入一个json对象,如下所示:

{  
"88":{  
   "4":{  
      "lat":"40.0215268",
      "lng":"-105.2177324",
      "userID":96,
      "deviceID":"1",
      "measurements":[
        ["Hum",
         "PPB",  
           720
        ],
        ["PM10",
         "PPB",
         720
        ]
      ]
    },
   "6":{  
      "lat":"40.0215299",
      "lng":"-105.2177096",
      "userID":96,
      "deviceID":"1",
      "measurements":[
        ["Pres",
         "PPB",  
           730
        ],
        ["PM10",
         "PPB",
         720
        ]
      ]
    }
  }
}

所以本质上我需要根据trek_id进行分组,然后再根据编号进行分组。

好的,首先要做的事情是:SQL结果是平面表。它们没有子组或子数组。因此,您需要处理显示代码中的所有子分组

第二:现有数据已经非常适合显示代码,比如说PHP创建多维数组以转换为JSON

--提示伪U代码--

<?php
// assume  $results contains your data AND SORTED BY trek_id, number, name

$cur_trek   = null;
$cur_number = null;
$json = array();

foreach ($results as $res) {
   if ($cur_trek != $res['trek_id']) {
      $cur_trek   = $res['trek_id'] ;
      $json[$cur_trek] = array();
      $cur_number = null;
   }
   if ($cur_number != $res['number']) {
       $cur_number = $res['number'];
       $json[$cur_trek][$cur_number] = 
         array(
           'lat'          => $res['lat'],
           'lng'          => $res['lng'],
           'userID'       => $res['userID'],
           'deviceID'     => $res['deviceID'],
           'measurements' => array();
         );
   }
   $json[$cur_trek][$cur_number]['measurements'][] = 
     array($res['name'], $res['units'], $res['value']);
}

$json = json_encode($json);

考虑到最终结果,按sql语句中的某些内容分组是没有意义的。获取所有记录-如图所示,使用您选择的编程语言循环遍历它们,并构建json数组这是您的查询?