【问题标题】:PHP & Mysql Query for JSON Output用于 JSON 输出的 PHP 和 Mysql 查询
【发布时间】:2018-02-12 03:14:40
【问题描述】:

我在 MySQL 数据库中有一个表,我尝试创建它以使其能够存储的信息更加灵活。想法是把大量的测试信息放到这个表中,然后我可以查询表并输出到PHP中对数据进行分析。

表架构如下; idraw_data(自动增量) entry_date(日期时间) 传感器 ID(整数) test_ID (int) test_value (double)

我还使用了另外两个表,它们链接到 SensorID 和 Test_ID。一张列出特定传感器的位置和信息(例如分配给谁),另一张表包括测试信息,例如测试测量的内容、单位、上限和下限等。

所以我有一个连接语句,它可以让我以日期、办公桌、测试名称和值的形式获取数据,这些数据由周一至周五(上午 9 点 - 下午 5 点)过滤,这是下面的查询;

SELECT raw_data.entry_date, SensorID.Desk, tests.testname, raw_data.test_value FROM raw_data INNER JOIN sensorID ON raw_data.sensorID = SensorID.Sensor INNER JOIN tests ON raw_data.test_id = tests.testid WHERE WEEKDAY(raw_data.entry_date) BETWEEN 0 AND 4 AND HOUR(raw_data.entry_date) BETWEEN 9 AND 17;

我可以使用 PHP 查询并获取数据库输出,然后使用 json_encode 将其放入 JSON 字符串中,然后输入到图形包 amcharts 但我苦苦挣扎的是如何格式化数据以使其更可用.

有人能告诉我如何格式化 mysql 输出,以便随后能够获得类似的 json 模式,该模式提供日期和时间,然后是动态的测量类型和值,

例如日期,{地点; locationname, [testa:testaname_value, testbname;testbvalue}} 还是有更好的输出方式以便于绘图?

非常感谢!

【问题讨论】:

    标签: php mysql json


    【解决方案1】:

    在这种情况下,我通常做的是从 MySQL 获取原始数据并对其进行循环,构造一个新数组,然后可以将其转换为 JSON 并用于绘图。

    例如:

    $db_data = RAW_DATA_FROM_MYSQL_ARRAY;
    $data_for_graph = [];
    
    foreach ($db_data as $item){
    
      $data_for_graph[$item['entry_date']] = [
        'location' => $item['location_name'],
        'testa' => $item['testaname_value'],
        'results' => [
          'test_a' => $item['test_a_val'],
          'test_b' => $item['test_b_val'],
        ],
        // etc... construct this as you like..
      ];
    }
    
    $data_for_graph_json = json_encode($data_for_graph);
    
    // now do stuff with the graphs
    

    希望这会有所帮助!

    更新

    根据 OP 请求添加了嵌套数组结构。

    【讨论】:

    • 感谢 Phirschybar,我尝试使用以下示例 foreach ($emparray as $item){ $data_for_graph[$item['entry_date']] = [ 'location' => $item[' location'] = [ $item['test'] => $item['testresult'], // 等等...随心所欲地构建它.. ]]; } 但运气不好,我得到 {"2017-11-15 09:00:00":{"location":{"Outdoor Humidity":"36"}},我如何在一段时间后将位置设为数组并包含位置值,然后创建一个室外湿度子数组?谢谢大家
    • @user1829564 - 我的例子只是为了让你开始。我不确定您的案例和特定图表库所需的确切格式。数组可以用任何方式构造。
    • 感谢您的帮助,从外观上看是一个关联数组?我很好奇的是您如何在数组中拥有一个数组并从基于行的信息中获取它(或者也许您不能),例如我有一个包含日期、位置、测试和测试值的单行,但理想情况下希望将其分解,以便一个日期有很多位置,有很多测试,每个测试都有一个结果.例如 Date A ---> Location A (Test A;Result A, Test B;Result B, ) --> Location B (Test A;ResultA,TestB;ResultB) Date B --> (Location A (TestA;结果A);位置B(....谢谢:)
    • @user1829564 - 我在示例中添加了嵌套数组结构。所以你可以看到你可以随心所欲地构造数组。转换为 JSON 应该可以按预期工作。希望这会有所帮助。
    • 非常感谢大家的宝贵回复,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2012-05-08
    • 2015-05-19
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2015-07-12
    相关资源
    最近更新 更多