V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiobanma
V2EX  ›  程序员

mysql json 数据的处理

  •  
  •   jiobanma ·
    banmajio · 2021-12-07 10:44:24 +08:00 · 1887 次点击
    这是一个创建于 861 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [
        {
            "id":76335210,
            "name": "张三"
        },
        {
            "id":76335211,
            "name": "李四"
        }
    ]
    

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

    7 条回复    2021-12-08 16:29:16 +08:00
    JonathanLee07734
        1
    JonathanLee07734  
       2021-12-07 11:36:25 +08:00
    ```mysql
    select trim(trailing ']' from
    trim(leading '[' from
    replace(replace(json_extract(@json, '$[*].name'), '"', ''), ', ', '/')));
    ```

    这逻辑为啥不放在程序里= =
    onhao
        2
    onhao  
       2021-12-07 11:53:42 +08:00
    moen
        3
    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
        4
    jyao  
       2021-12-08 09:49:11 +08:00
    这种操作一般由代码去实现吧,使用 sql 来实现太浪费资源了,而且对数据库极其不友好,实际开发过程中及其不推荐
    ourFEer
        5
    ourFEer  
       2021-12-08 09:59:04 +08:00
    看头像进来的,你头像啥情况
    jiobanma
        6
    jiobanma  
    OP
       2021-12-08 10:55:10 +08:00
    @JonathanLee07734 好思路

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

    @ourFEer py 哈哈哈
    jiobanma
        7
    jiobanma  
    OP
       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 都代表的是什么啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1363 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:28 · PVG 01:28 · LAX 10:28 · JFK 13:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.