mysql json 数据的处理

2021-12-07 10:44:24 +08:00
 jiobanma
[
    {
        "id":76335210,
        "name": "张三"
    },
    {
        "id":76335211,
        "name": "李四"
    }
]

mysql 中存的字段是 json 类型。有什么方法可以查询出某个字段的拼接结果? 现在想到得到:张三 /李四。类似这样的结果。 目前通过 JSON_EXTRACT 函数得到的结果是一个 array:["张三", "李四"]

1901 次点击
所在节点    程序员
7 条回复
JonathanLee07734
2021-12-07 11:36:25 +08:00
```mysql
select trim(trailing ']' from
trim(leading '[' from
replace(replace(json_extract(@json, '$[*].name'), '"', ''), ', ', '/')));
```

这逻辑为啥不放在程序里= =
onhao
2021-12-07 11:53:42 +08:00
moen
2021-12-07 16:22:28 +08:00
上面那个字符串操作简直太吓人了,正常人的写法应该是
SELECT GROUP_CONCAT(name SEPARATOR '/')
FROM table, JSON_TABLE(json_column, '$[*]' COLUMNS (name VARCHAR(255) PATH '$.name')) AS names
jyao
2021-12-08 09:49:11 +08:00
这种操作一般由代码去实现吧,使用 sql 来实现太浪费资源了,而且对数据库极其不友好,实际开发过程中及其不推荐
ourFEer
2021-12-08 09:59:04 +08:00
看头像进来的,你头像啥情况
jiobanma
2021-12-08 10:55:10 +08:00
@JonathanLee07734 好思路

@onhao 感谢
@moen 感谢 待会儿试一下
@jyao 因为只是一个字段,数据库之前设计的不合理,拿出来处理不想多写一堆代码

@ourFEer py 哈哈哈
jiobanma
2021-12-08 16:29:16 +08:00
@moen 请教一下大佬,
```sql
SELECT GROUP_CONCAT(name ( 1 ) SEPARATOR '/')
FROM table, JSON_TABLE(json_column ( 2 ), '$[*]' COLUMNS (name ( 3 ) VARCHAR(255) PATH '$.name ( 4 )')) AS names

```
1234 都代表的是什么啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/820547

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX