标签: mysql-json

从存储在MySQL数据库中的json字符串中删除键:值

我在表中有一列以格式存储:

{"field1":"val1","field2":"val4"}
{"field1":"val2","field2":"val5"}
{"field1":"val3","field2":"val6"}
Run Code Online (Sandbox Code Playgroud)

我需要删除所有field1的值(例如"field1":"val1","field1":"val2","field1":"val3"),结果应该是

{"field2":"val4"}
{"field2":"val5"}
{"field2":"val6"}
Run Code Online (Sandbox Code Playgroud)

我试图通过替换实现这个,但卡在'"field1"中:"val1"'字符串val1可以是任何值,如null,某个整数.

UPDATE emp SET col = REPLACE(col, '"field1":"val1"', '')
Run Code Online (Sandbox Code Playgroud)

由于val1的动态值,我陷入困境.

mysql sql mysql-json

6
推荐指数
1
解决办法
3951
查看次数

mySQL 5.7使用新的json功能将行返回为json

我正在讨论一些新的JSON功能,并想知道是否有一种聪明(或明显)的方式将行集作为JSON对象返回.理想情况下,无需命名键或使用任何类型的字符串操作.

例:

TABLE: people
id     name     age
1      bob      54
2      jay      32
3      john     10

SELECT * FROM people where id = 1
Run Code Online (Sandbox Code Playgroud)

会回来的

{"id":1,"name":"bob","age":54}
Run Code Online (Sandbox Code Playgroud)

甚至更好

SELECT * FROM people
Run Code Online (Sandbox Code Playgroud)

将返回所有3个对象的数组

如果您不熟悉新的JSON功能,那么其​​中一个新功能就是 JSON_OBJECT

SELECT JSON_OBJECT('key1', 1, 'key2', 'abc')
Run Code Online (Sandbox Code Playgroud)

将返回一个键值JSON对象.

mysql json mysql-json

5
推荐指数
1
解决办法
3157
查看次数

如何提取 MySQL 中 JSON 数组内元素内特定属性的所有值?

我将以下数据存储在 MySQL 表的一列中,该表的数据类型为“json”(MySQL v5.7.9)

[{"id": "26", "title": "similar1", "score": "0.97"}, {"id": "27", "title": "similar2", "score": "0.87"}, {"id": "28", "title": "similar2", "score": "0.87"}]
Run Code Online (Sandbox Code Playgroud)

我需要一个 MySQL 查询,它将返回所有“标题”值,即相似1、相似2和相似3等等

mysql sql json mysql-json

5
推荐指数
1
解决办法
1870
查看次数

如何从MySQL中的数字键嵌套JSON字段中提取值

我有一个带有JSON列的MySQL表sent。列中的条目具有如下信息:

{
 "data": {
  "12":"1920293"
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用mysql查询:

select sent->"$.data.12" from mytable
Run Code Online (Sandbox Code Playgroud)

但我有一个例外:

Invalid JSON path expression. The error is around character position 9.
Run Code Online (Sandbox Code Playgroud)

知道如何提取信息吗?该查询适用于非数字子字段。

mysql json mysql-json

5
推荐指数
1
解决办法
1155
查看次数

如何将 MySQL JSON 数组转换为逗号分隔的字符串

我在列中有以下电话号码:

["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这样的信息:

+63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403
Run Code Online (Sandbox Code Playgroud)

mysql json mysql-json

5
推荐指数
2
解决办法
8253
查看次数

MySQL 5.7:将简单的 JSON_ARRAY 转换为行

我有一个带有 JSON_ARRAY 列的简单表,如下所示:

+----+---------+
| id | content |
+----+---------+
|  1 | [3, 4]  |
|  2 | [5, 6]  |
+----+---------+
Run Code Online (Sandbox Code Playgroud)

我想列出特定 ID 的所有内容引用

SELECT JSON_EXTRACT(content, '$') as res FROM table WHERE id=1

但我希望结果成行:

+-----+
| res |
+-----+
|  3  |
|  4  |
+-----+
Run Code Online (Sandbox Code Playgroud)

mysql arrays mysql-json

5
推荐指数
1
解决办法
2044
查看次数

Rails has_many 基于 json 数组列

是否可以告诉 Rails 使用 JSON 列作为关系的“后端”?我有一个Article模型,它将评论 id 存储在 JSON 列中Article#comment_ids

class Article < ApplicationRecord
  def comments
    Comment.where(id: comment_ids)
  end
end

class Comment < ApplicationRecord
end

Article.first.comment_ids
=> [1,2]

Article.first.comments
=> [#<Comment:0x00007f4d7cff7c08 id: 1>,#<Comment:0x00007f4d7cff7c08 id: 2>]
Run Code Online (Sandbox Code Playgroud)

有没有办法替换这段代码

def comments
  Comment.where(id: comment_ids)
end
Run Code Online (Sandbox Code Playgroud)

与一个

has_many :comments # somehow reference #comment_ids
Run Code Online (Sandbox Code Playgroud)

背景:我的应用程序的其他部分使用急切加载之类的东西article.association(:comments).loaded?。而且因为它不是 Rails 关系,所以这不适用于 Comments 关系。

mysql ruby-on-rails mysql-json

5
推荐指数
0
解决办法
1504
查看次数

MySQL 合并来自多个 JSON 行的数组

我有一个带有 json 列的表,如下所示:

+----+------------+
| id | myfield    |
+----+------------+
|  1 | ["1", "2"] |
|  2 | ["3", "2"] |
|  3 | ["2", "4"] |
+----+------------+
Run Code Online (Sandbox Code Playgroud)

如何将myfield中的所有值合并到一个数组中?

我需要一个如下所示的结果:["1", "2", "3", "2", "2", "4"],或者删除重复项后效果更好。

我尝试使用这个查询: SELECT JSON_ARRAYAGG(myfield) FROM json_test但结果我得到:

[["1", "2"], ["3", "2"], ["2", "4"]]

我假设我需要与函数 JSON_MERGE 结合使用的查询。

mysql arrays merge mysql-json

5
推荐指数
1
解决办法
4559
查看次数

在 MySQL 和 MariaDB 上按 JSON 数组列对行进行排序

PostgreSQL 允许按数组对行进行排序。它比较每个数组的第一个值,然后比较第二个值,依此类推(fiddle):

select array[2, 4] as "array"
union
select array[10] as "array"
union
select array[2, 3, 4] as "array"
union
select array[10, 11] as "array"
order by "array"
Run Code Online (Sandbox Code Playgroud)
大批
[2,3,4]
[2, 4]
[10]
[10, 11]

MySQL 和 MariaDB 上最接近的等效项似乎是JSON 数组

MySQL 显然或多或少随机地按长度对数组进行排序( fiddle):

select json_array(2, 4) as `array`
union
select json_array(10) as `array`
union
select json_array(2, 3, 4) as `array`
union
select json_array(10, 11) as `array`
order by `array`
Run Code Online (Sandbox Code Playgroud)
大批
[10]
[2, 4] …

mysql json sql-order-by mariadb mysql-json

5
推荐指数
1
解决办法
1119
查看次数

使用 MariaDB 更新 Json 对象内具有特定值的字段

我正在尝试更新 MariaDB 中 json 列中存储的数据(libmysql 版本 - 5.6.43 ,服务器:10.3.34-MariaDB-cll-lve - MariaDB 服务器)。

\n

我的数据结构如下:

\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
IDjson_数据
1{....}
2{....}
\n
\n

其中json_data的结构如下:

\n
{\n    "company": {\n        "id": "",\n        "name": "",\n        "address": ""\n    },\n    "info_company": {\n          "diff_v": "1",\n          "grav_v": "",\n          "diff_s": "2",\n          "grav_s": "",\n          "diff_g": "3",\n          "grav_g": "",\n          "diff_ri": "4",\n          "grav_ri": "2"\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我正在尝试更新info_company内的数据,替换:

\n
    \n
  • “1”与“<50%”
  • \n
  • “2”与“<50%”
  • \n
  • “3”与“>50%”
  • \n
  • “4”与“>50%”
  • \n
\n

所以结果应该是:

\n
{\n    "company": {\n        "id": "",\n        "name": …
Run Code Online (Sandbox Code Playgroud)

mariadb mysql-json mariadb-10.3

5
推荐指数
1
解决办法
2066
查看次数