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

mysql json 数据的处理

  •  
  •   jiobanma ·
    banmajio · 47 天前 · 952 次点击
    这是一个创建于 47 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [
        {
            "id":76335210,
            "name": "张三"
        },
        {
            "id":76335211,
            "name": "李四"
        }
    ]
    

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

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

    这逻辑为啥不放在程序里= =
    onhao
        2
    onhao  
       47 天前
    moen
        3
    moen  
       47 天前
    上面那个字符串操作简直太吓人了,正常人的写法应该是
    SELECT GROUP_CONCAT(name SEPARATOR '/')
    FROM table, JSON_TABLE(json_column, '$[*]' COLUMNS (name VARCHAR(255) PATH '$.name')) AS names
    jyao
        4
    jyao  
       46 天前
    这种操作一般由代码去实现吧,使用 sql 来实现太浪费资源了,而且对数据库极其不友好,实际开发过程中及其不推荐
    ourFEer
        5
    ourFEer  
       46 天前
    看头像进来的,你头像啥情况
    jiobanma
        6
    jiobanma  
    OP
       46 天前
    @JonathanLee07734 好思路

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

    @ourFEer py 哈哈哈
    jiobanma
        7
    jiobanma  
    OP
       46 天前
    @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   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2402 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 11:42 · PVG 19:42 · LAX 03:42 · JFK 06:42
    ♥ Do have faith in what you're doing.