当前位置: 首页 > 面试题库 >

如何从MySQL检索JSON数据?

夏侯星洲
2023-03-14
问题内容

我有以下表格及其关系。我将JSON数据存储在client_services表中。它们是使用MySQL查询来检索JSON值的任何方式,如下所示:

SELECT getJson("quota") as quota,
       client_id
FROM client_services
WHERE service_id = 1;

还是可以进一步规范化client_services表?

Services

+----+-----------------------+--------------------------------------------------------+
| id | name                  | description                                            |
+----+-----------------------+--------------------------------------------------------+
|  1 | MailBox               |                                                        |
|  2 | SMS                   |                                                        |
|  3 | FTP                   |                                                        |
+----+-----------------------+--------------------------------------------------------+

service_features

+----+------------+----------------------------------+------------------------+
| id | service_id | name                             | description            |
+----+------------+----------------------------------+------------------------+
| 10 |          1 | Forwarding                       | Forward Mail           |
| 11 |          1 | Archive                          | Archive Mail           |
| 12 |          1 | WebMail                          | NULL                   |
| 13 |          1 | IMAP                             | NULL                   |
| 14 |          2 | Web SMS                          | NULL                   |
+----+------------+----------------------------------+------------------------+

client_services

+-----+-----------+------------+-------------------------------------------------------------------------------------------+
| id  | client_id | service_id | service_values                                                                            |
+-----+-----------+------------+-------------------------------------------------------------------------------------------+
| 100 |      1000 |          1 |{ "quota": 100000,"free_quota":20000,"total_accounts":200,"data_transfer":1000000}         |
| 101 |      1000 |          2 |{ "quota": 200 }                                                                           |
| 102 |      1000 |          3 |{ "data_transfer":1000000}                                                                 |
| 103 |      1001 |          1 |{ "quota": 1000000,"free_quota":2000,"total_accounts":200,"data_transfer":1000000}         |
| 104 |      1001 |          2 |{ "quota": 500 }                                                                           |
| 105 |      1002 |          2 |{ "quota": 600 }                                                                           |
+-----+-----------+------------+-------------------------------------------------------------------------------------------+

client_feature_mappers

+-----+-------------------+--------------------+-----------+
| id  | client_service_id | service_feature_id | client_id |
+-----+-------------------+--------------------+-----------+
|10000|                100|                 10 |       1000|
|10001|                100|                 11 |       1000|
|10002|                100|                 12 |       1000|
|10003|                100|                 13 |       1000|
|10004|                101|                 14 |       1000|
|10005|                103|                 10 |       1001|
|10006|                101|                 11 |       1001|
|10007|                101|                 12 |       1001|
|10008|                101|                 13 |       1001|
|10009|                105|                 14 |       1002|
+-----+-------------------+--------------------+-----------+

问题答案:

由于很多人都亲自问过我这个问题,所以我想我会再作一次修改。这是一个具有SELECT,Migration和View
Creation的完整SQL的要点,
以及一个实时sql提琴
提琴 不保证可用性)

假设您有这样的表(名为:JSON_TABLE):

 ID   CITY        POPULATION_JSON_DATA
-----------------------------------------------------------------------
 1    LONDON      {"male" : 2000, "female" : 3000, "other" : 600}
 2    NEW YORK    {"male" : 4000, "female" : 5000, "other" : 500}

要选择每个json字段,您可以执行以下操作:

SELECT 
    ID, CITY,
    json_extract(POPULATION_JSON_DATA, '$.male') AS POPL_MALE,
    json_extract(POPULATION_JSON_DATA, '$.female') AS POPL_FEMALE,
    json_extract(POPULATION_JSON_DATA, '$.other') AS POPL_OTHER
FROM JSON_TABLE;

结果:

ID  CITY      POPL_MALE  POPL_FEMALE   POPL_OTHER 
-----------------------------------------------------------------
1   LONDON    2000       3000          600
2   NEW YORK  4000       5000          500

根据您的数据大小和json复杂度,这可能是一项昂贵的操作。我建议将其用于

  1. 表迁移到拆分数据库( 请参见附录2-B)
  2. 至少创建一个视图 (要点请参阅附录2-C)

请注意:您可能拥有 以双引号 (stringified) 开头的 json :

"{"male" : 2000, "female" : 3000, "other" : 600}"

在Ubuntu和Mac OSX Sierra上使用Mysql 5.7进行了测试。



 类似资料:
  • 假设我有一个firebase节点,它是dbref=firebase。ref('/Transfer_Request/{pushID]/')。 客户端写入两个值;从_ID和到_ID到dbref。如何从Firebase云函数中获取from_ID和to_ID的单个值? 我的代码: 我得到两个错误: 1) 类型错误:admin。数据库(…)。set不是导出时的函数。转车票。功能。数据库对象处的ref.onW

  • 我收到以下JSON作为响应 我正在解析这个JSON,如下所示 这很好用。 我的问题是,如果JSON中缺少任何一个键,例如“名称”丢失,它就会断裂,我将无法定义 是否可以检查是否存在,然后重试? https://jsfiddle.net/o2gxgz9r/9078/ 关于我修改了json的答案 但是他自己的财产不起作用了? 请看这把小提琴 https://jsfiddle.net/o2gxgz9r/

  • 问题内容: :我只想显示Mysql表记录的简单ajax代码: Records.php是用于从Mysql提取记录的文件。 在数据库中只有两个字段:“名称”,“地址”。 该代码不起作用。 问题答案: 为了使用Ajax + jQuery检索数据,您应该编写以下代码: 对于mysqli连接,请编写以下代码: 为了显示数据库中的数据,您应该这样编写:

  • {“type”:“record”、“name”:“twitter_schema”、“namespace”:“com.miguno.avro”、“fields”:[{“name”:“username”、“type”:“string”、“doc”:“Twitter.com上的用户帐户名称”}、{“name”:“tweet”、“type”:“string”、“doc”:“用户的Twitter消息内容”}

  • 我是一个Laravel新手,我正在转换一个php/jQuery应用程序到Laravel。原始代码使用带有ajax POST的JSON数组,检索如下: 我在POST方面也做了很多相同的事情,但我在我的Laravel$请求收集中没有看到任何数据。我是否需要做一些特殊的事情来检索如下结构的JSON数据: 这是我的jQuery ajax POST代码(带有硬编码数据) 这是我的控制器中接收POST的代码

  • 今天发生了一件奇怪的事情:我正试图使用jquery和ajax从一个JSON文件中检索一些数据,并将这些数据显示在一个网页上。我在互联网上找到的这个例子对我在基础操作系统上起作用。当我尝试从带有Win10操作系统的虚拟机运行它时,它不起作用,这意味着它会将我抛到:。为什么?提前多谢! 这在我的data19.json文件中: 我的脚本script19.js是: 我的HTML文件是: