当前位置: 首页 > 知识库问答 >
问题:

将SQL查询的结果格式化为JSON

彭允晨
2023-03-14
SELECT tbl_room.room, tbl_room.room_id, tbl_device.name, tbl_display.display, tbl_function.function, tbl_device.format
    FROM tbl_device
    INNER JOIN tbl_room ON tbl_room.id = tbl_device.room_id
    INNER JOIN tbl_display ON tbl_display.id = tbl_device.display_id
    INNER JOIN tbl_function ON tbl_function.id = tbl_device.function_id
    ORDER BY tbl_room.room_id;
Bedroom (Main)  bedroom_main    bme280/1    gauge   temperature {"min": 0, "max": 50, "dp": 1, "units": "°C"}
Bedroom (Main)  bedroom_main    bme280/1    gauge   humidity    {"min": 0, "max": 100, "dp": 1, "units": "%"}
Bedroom (Main)  bedroom_main    bme280/1    gauge   pressure    {"min": 0, "max": 1100, "dp": 1, "units": "hPa"}
Front Room  front_room  ds18b20/heater  gauge   temperature {"min": 0, "max": 50, "dp": 1, "units": "°C"}
[
    { "name": "Office",
      "id": "office",
      "devices": []
    },
    { "name": "Front Room", 
       "id": "front_room",
       "devices": []
    }
  }
]

这可以在单个sql查询中完成吗?或者我必须在循环中对每个房间进行查询吗?还是在一次查询中转储整个数据集,然后在pyhton中处理它更有效率?这是一个很小的数据集,但我有兴趣知道哪一个是最有效的方法。

先谢谢你,马丁

下面是我的表结构:

-- Table: tbl_device
CREATE TABLE tbl_device (
    name        VARCHAR NOT NULL ON CONFLICT ROLLBACK,
    room_id     INTEGER CONSTRAINT fk_room REFERENCES tbl_room (id) 
                        NOT NULL,
    function_id INTEGER CONSTRAINT fk_function REFERENCES tbl_function (id) 
                        NOT NULL ON CONFLICT ROLLBACK,
    display_id  INTEGER CONSTRAINT fk_display REFERENCES tbl_display (id) 
                        NOT NULL ON CONFLICT ROLLBACK,
    format      VARCHAR NOT NULL ON CONFLICT ROLLBACK
                        DEFAULT [default],
    UNIQUE (
        name,
        room_id,
        function_id,
        display_id
    )
    ON CONFLICT ROLLBACK
);


-- Table: tbl_display
CREATE TABLE tbl_display (
    id      INTEGER PRIMARY KEY AUTOINCREMENT,
    display VARCHAR NOT NULL ON CONFLICT ROLLBACK
                    UNIQUE ON CONFLICT ROLLBACK
);


-- Table: tbl_function
CREATE TABLE tbl_function (
    id       INTEGER PRIMARY KEY AUTOINCREMENT,
    function VARCHAR NOT NULL ON CONFLICT ROLLBACK
                     UNIQUE ON CONFLICT ROLLBACK,
    control  BOOLEAN NOT NULL
                     DEFAULT (0) 
);


-- Table: tbl_room
CREATE TABLE tbl_room (
    id      INTEGER PRIMARY KEY AUTOINCREMENT,
    room_id VARCHAR NOT NULL
                    UNIQUE ON CONFLICT ROLLBACK,
    room    VARCHAR NOT NULL ON CONFLICT ROLLBACK
);

共有1个答案

申屠恺
2023-03-14

首先,没有办法直接将JSON响应从MySQL数据库馈送到VueJS或任何其他App。VueJS应用程序是应用程序的前端。您必须创建一个连接到MySQL数据库的后端,从MySQL数据库获取必要的数据,将其转换为JSON并发送到Vue应用程序。

为了开发后端,您可以使用PHP、Python、Java、NodeJS等语言。

如果您可以继续使用PHP,那么获取数据并转换为JSON是非常容易的。

但如果您仍然需要继续使用Python,则必须使用Flask或任何其他Python web框架来完成此操作。

<?php

$dbhost = 'hostname';
$dbuser = 'username';
$dbpass = 'password';
$dbname = 'database';

  $db = new mysqli($dbhost, $dbuser, $dbpass, $dbname);

  if ($db->connect_errno) {
     printf("Failed to connect to database");
     exit();
  }

  $result = $db->query("SELECT * FROM "); // Your SQL query

  $data = array();

  while ( $row = $result->fetch_assoc())  {
    $data[]=$row;
  }


 echo json_encode($data);
 
?>
 类似资料:
  • 哪种方法是以CSV格式导出JPA查询结果的最佳方法?我试过opencsv,但它需要一个java.sql.ResultSet对象,我不明白如何创建它。我尝试了以下代码 但我收到异常java.lang.ClassCastException:java.util.Vector不能强制转换为java.sql.ResultSet

  • 问题内容: 我非常确定我们不能将LIMIT子句用于我想做的事情-因此想确定是否还有其他方法可以实现此目的。 我有一个表,其中捕获了哪个用户访问了哪个商店。每次用户访问商店时,都会在此表中插入一行。 一些领域是 shopping_id(primary key) store_id user_id 现在,我想要的是-对于给定的一组商店,找到访问该商店的最大次数的前5位用户。 我可以一次在1个商店中进行以

  • 问题内容: 我正在用SSRS编写一份报告。该数据集填充有MS SQL Server的SQL查询。它使用Union All查询几个相似的表。问题是有一些信息丢失。不同的表适用于不同的工作站点,但是这些表中的任何列都没有站点名称。标识站点的唯一方法是通过表名。在“全部合并”的结果的合并列中,无法分辨出哪些行来自哪个站点。 有没有一种方法可以更改我的查询以在结果中添加一列,该列将具有与每一行相关联的工作

  • 问题内容: 我的DataAcess类中具有以下功能,但未显示任何结果。 我的代码如下: 我也尝试过: 但是它可以很好地运行而无需像这样进行参数设置: 如何使用 @ProductName 参数化编写此代码? 问题答案: 你应该用 代替 为什么?因为在查询中,您的参数在引号内。在报价,SQL会将其识别为一个 字符串字面量 和 从来没有 看到它作为一个参数。

  • 问题内容: 我想读取一个表,该表的值将是sql查询结果的列名。例如,我将table1作为.. 如果看到id = 0,则name的值为ax,name2为bx,name3为cx。将行显示为id,name,name2,name3而不是行。现在,我希望查询结果看起来像这样: 有人可以帮助我实现这一目标吗? 问题答案: 这是通过 数据透视表完成的 。按分组,您为要在列中捕获的每个值发出语句,并使用诸如聚合之