如何从 MySQL 检索 JSON 数据?

2024-03-22

我有下表及其关系。我将 JSON 数据存储在 client_services 表中。他们有什么方法可以使用 MySQL 查询检索 JSON 值,如下所示:

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

或者我可以进一步规范 client_services 表吗?

Table Services:

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

Table 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                   |
+----+------------+----------------------------------+------------------------+

Table 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 }                                                                           |
+-----+-----------+------------+-------------------------------------------------------------------------------------------+

Table 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|
+-----+-------------------+--------------------+-----------+

由于很多人私下问过我这个问题,我想我应该对这个答案进行第二次修改。这是具有完整 SQL 的要点,包括 SELECT、迁移和视图创建 https://gist.github.com/ti-ka/d0b264324c68fb81743035d98b9cbb8c and 一个实时的 sql 小提琴 http://rextester.com/FCQXL35972 (不保证小提琴的可用性).

假设您有一个如下表(名为:TBL_JSON):

 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 TBL_JSON;

结果:

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)

注意:你可能有 json以双引号开头(字符串化):

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 MySQL 检索 JSON 数据? 的相关文章

随机推荐

  • R update() 交互项未删除

    问题 我打算用交互项拟合线性模型 在估计 完整 模型后 我想删除不重要的交互项 但是 在我的模型上使用函数 update lm interaction 后 没有任何反应 请帮忙 Data library car data Prestige
  • 使用 OpenCV 输出作为网络摄像头 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 所以 我想编写一个程序 使 OpenCV 处理后的输出被视为网络摄像头 我想用它为 Skype 等程序创
  • 重命名导入的静态函数有什么问题?

    考虑以下 Scala 代码 object MainObject def main args Array String import Integer parseInt gt atoi println atoi 5 2 println args
  • 如何在流式传输之前知道音频歌曲的持续时间?

    我正在制作一个流音频歌曲的应用程序 在自定义媒体播放器中 我必须显示该音频文件的总持续时间 如果一首音频歌曲是 SDCard 我可以使用以下方法知道它的持续时间 MediaPlayer player public double durati
  • MySQL - 如何插入具有多对多关系的表

    我有一桌人 每个人都拥有一项财产 并且许多人可能拥有某种财产 所以这是一个多对多的关系 这是架构 CREATE TABLE persons person id int 11 NOT NULL AUTO INCREMENT firstname
  • 有没有办法告诉 html 元素忽略任何样式表?

    我正在尝试向已经具有全局 选择 样式的页面添加下拉菜单 有没有办法告诉新的选择列表忽略全局样式 大约有 1 到 2 个使用全局样式的现有下拉菜单 所以我不想重构现有的 html 假设您可以在该元素上设置唯一的类或 id 您可以使用 有限的浏
  • R 3.5 中的 data.table 包未安装

    我目前正在使用 R 3 5 测试版 我的项目中需要 data table 包 但我的包未安装 任何人都可以帮我解决这个问题吗 当我安装它时 它向我显示以下错误 install packages 数据 表 将软件包安装到 C Users hp
  • Windows Mobile 同步错误

    我是 Windows Mobile 开发新手 一直在研究在 PDA 运行的 WM6 和 SQL Server 2005 数据库之间同步数据的方法 经过一番研究后 我决定使用 Windows 同步服务 我首先查看示例 SyncServices
  • 检查一个名字是否看起来“人类”?

    我有一款在线角色扮演游戏 我正在认真对待 最近 我遇到了用户使用虚假名称 只是一堆不同字母 制作虚假字符的问题 就像 Ghytjrhfsdjfnsdms Yiiiedawdmnwe Hhhhhhhhhhejejekk 我强迫他们改名 但这已
  • 使用“json.dumps”时 JSON 对象中的项目乱序?

    我在用着json dumps转换成json就像 countries append id row id name row name timezone row timezone print json dumps countries 我得到的结果
  • 禁用 EclipseLink 缓存

    在我的应用程序中 当用户登录系统时 系统从数据库读取一些设置并将它们存储在用户的会话中 系统使用 EclipseLink JPA 2 0 通过 JPA 查询执行此操作 当我更改数据库中的某些设置并再次登录时 查询将返回以前的结果 Eclip
  • 定期调用 Android 服务 [GoodApporach?]

    我的要求是 Android 应用程序必须每隔一小时 可配置 向服务器发送用户位置详细信息 纬度和经度 我遵循的方法是使用警报管理器 我以配置的时间间隔调用我的服务 无论应用程序是否正在运行 该服务都会将位置详细信息发送到服务器 这是一个好方
  • URLWithString 对于资源路径返回 nil - iphone

    由于某种原因获取资源的 URL 时出现问题 此代码位于 viewDidLoad 中 并且可以在其他应用程序中使用 但由于某种原因不能在此处使用 NSString audioString NSBundle mainBundle pathFor
  • 升级到 Xcode 5.0.2:xib 警告。属性不可用

    我最近升级到了 xcode 5 0 2 现在 当我构建 Cocoa 应用程序时 我收到此警告 属性不可用 在 10 8 之前的 Mac OS X 版本上使用当前宽度作为最大布局宽度 我尝试找到 最大布局宽度 但无法找到 我该如何摆脱这个警告
  • ES6的导出和花括号

    我看到聊天频道中发布了一段代码 他的代码的最后是 export UserInformation 有些团体表示语法错误 有人说只要变量存在就可以 那么哪一组是正确的呢 我也是第一次见到这种语法 我在导出时从未见过花括号 我只在导入时使用过它们
  • 使用 PHP 测试 FTP 连接

    我正在使用下面的 PHP 脚本来测试 FTP 连接 目前 如果连接成功 它正在打印文件数组 如果能够连接 如何让它也显示消息 就像 连接成功 一样 con ftp connect server or die Couldn t connect
  • 如何将 facebook 测试页面订阅到 facebook apps webhook

    我正在创建聊天机器人并想在 Facebook 上建立联系 我想在我的页面中测试我的信使聊天机器人 但我必须首先进行应用程序审查和业务验证 但我不想这样做 因为我刚刚开发了我的聊天机器人 或者你可以说这是暂存环境 I found that w
  • Python:将参数传递给 threading.Thread 实例的正确方法是什么

    我扩展了 threading Thread 我的想法是做这样的事情 class StateManager threading Thread def run self lock state while True lock acquire se
  • 如何用 Canvas 绘制曲线动画?

    我有很多点想慢慢画出来 我尝试 setTimeOut 以及由此产生的效果tutorial http www html5canvastutorials com advanced html5 canvas linear motion anima
  • 如何从 MySQL 检索 JSON 数据?

    我有下表及其关系 我将 JSON 数据存储在 client services 表中 他们有什么方法可以使用 MySQL 查询检索 JSON 值 如下所示 SELECT getJson quota as quota client id FRO