【发布时间】:2022-02-23 17:26:30
【问题描述】:
我有这样的 mysql 表,其中包含 id 和 json 类型列:
| id | value |
|---|---|
| 1 | {"sys": "20", "dia": "110"} |
| 2 | {"bpm": "200"} |
| 3 | {"bpm": "123", "sys": "1", "dia": ""} |
现在,我想要一个 MySQL 查询,其中的数据应如下所示,其中 id、val1 将包含 json 数据的键,而 val2 将包含各个键的值:
| id | val1 | val2 |
|---|---|---|
| 1 | sys | 20 |
| 1 | dia | 110 |
| 2 | bpm | 200 |
| 3 | bpm | 123 |
| 3 | sys | 1 |
| 3 | dia |
注意:我使用的是 MySQL 5.7 版本,JSON 对象内的键不固定。可以是任意数字。
我想知道如何使用 MySQL 查询来实现这一点
提前致谢!!!
【问题讨论】:
-
似乎将数据库设计为一个更好的主意,因为应该设计一个关系数据库。将数据库设计重构为更适合关系模型的东西是否为时已晚
-
JSON(JavaScript 对象表示法)通常由编程语言使用,而不是查询语言。所以,是的,你应该使用 MySQL 查询来检索和存储数据,但是为了解开 JSON,我会使用 PHP/Python/C/etc 之类的东西。 MySQL 确实有some support for JSON,也许这就足够了,但我对此表示怀疑。
-
我有这样的 mysql 表,其中包含 id 和 json 类型列: 显示的值可以是存储在 string-datatype 列中的 JSON 值,而不是存储在 JSON-datatype 列中。 val1 将包含 json 数据的键,val2 将包含各个键的值...我想知道如何使用 MySQL 查询来实现这一点 在您的版本上,这只能在迭代存储过程中执行.要在单个查询中执行此操作,您必须至少将服务器升级到 8.0.4。
-
啊。当可以在数据库列中存储任意序列化对象(JSON 对象)时,这是一个噩梦般的数据库设计示例。请添加一个包含
id、vital_name和value列的生命体征表。请注意,您还可以向生命体征添加时间戳或其他属性。请不要将 JSON 放在您的表列中,至少不要将您希望 MySQL 操作的数据放在其中。
标签: mysql denormalization mysql-json