• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    MySQL JSON类型数据查询方法

    发布者: 网神之王 | 发布时间: 2025-6-14 14:27| 查看数: 106| 评论数: 0|帖子模式

    1、json对象


    1.1、方法


    • 使用对象操作的方法进行查询:
      1. 字段->'$.json属性'
      复制代码
    • 使用函数进行查询:
      1. json_extract(字段, '$.json属性')
      复制代码
    • 获取JSON数组/对象长度:
      1. JSON_LENGTH()
      复制代码

    1.2、数据
    1. CREATE TABLE `test` (
    2.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    3.   `goods_sn` varchar(25) NOT NULL DEFAULT '' COMMENT '商品编码',
    4.   `desc_attr` json NOT NULL COMMENT '描述属性',
    5.   PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB COMMENT='TEST';
    7. INSERT INTO `test`.`test`(`id`, `goods_sn`, `desc_attr`) VALUES (1, 'A0001', '{"tag": ["GRS", "GOTS"], "size": "M", "color": "红色", "material": "尼龙"}');
    8. INSERT INTO `test`.`test`(`id`, `goods_sn`, `desc_attr`) VALUES (2, 'A0002', '{"tag": ["GRS", "GOTS", "MTD"], "size": "LA", "color": "黄色", "material": "纯棉"}');
    复制代码
    1.3、查询
    1. -- 查询面料不为空的商品
    2. select * from test where desc_attr->'$.material' is not null;
    3. select * from test where JSON_EXTRACT(desc_attr, '$.material') is not null;
    4. -- 查询面料为纯棉的商品
    5. select * from test where desc_attr->'$.material'='纯棉';
    6. select * from test where JSON_EXTRACT(desc_attr, '$.material')='纯棉';
    7. -- 查询标签数量大于2的商品
    8. select * from test where JSON_LENGTH(desc_attr->'$.tag')>2;
    复制代码
    2、json数组


    2.1、方法


    • 对象操作方式查询:
      1. 字段->'$[*].属性'
      复制代码
    • 使用函数查询:
      1. JSON_CONTAINS(字段,JSON_OBJECT('json属性', '内容'))
      复制代码
    • 获取JSON数组/对象长度:
      1. JSON_LENGTH()
      复制代码

    2.2、数据
    1. CREATE TABLE `test2` (
    2.   `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
    3.   `goods_sn` varchar(25) NOT NULL DEFAULT '' COMMENT '商品编码',
    4.   `desc_attrs` json NOT NULL COMMENT '描述属性,多个',
    5.   PRIMARY KEY (`id`)
    6. ) ENGINE=InnoDB COMMENT='TEST2';
    7. INSERT INTO `test`.`test2`(`id`, `goods_sn`, `desc_attrs`) VALUES (1, 'A0001', '[{"tag": ["GRS", "GOTS"], "size": "M", "color": "红色", "material": "尼龙"}, {"tag": ["GRS", "GOTS", "MTD"], "size": "LA", "color": "黄色", "material": "纯棉"}]');
    8. INSERT INTO `test`.`test2`(`id`, `goods_sn`, `desc_attrs`) VALUES (2, 'A0002', '[{"tag": ["GRS", "GOTS"], "size": "M", "color": "红色", "material": "尼龙"}, {"tag": ["GRS", "GOTS", "MTD"], "link": "xxx", "size": "LA", "color": "黄色", "material": "纯棉"}]');
    9. INSERT INTO `test`.`test2`(`id`, `goods_sn`, `desc_attrs`) VALUES (3, 'A0003', '[]');
    复制代码
    2.3、查询
    1. -- 查询描述属性不为空的商品
    2. select * from test2 where JSON_LENGTH(desc_attrs) > 0;
    3. -- 查询第1项存在颜色属性的商品
    4. select * from test2 where desc_attrs->'$[0].color' is not null;
    5. -- 查询任意项存在链接属性的商品
    6. select * from test2 where desc_attrs->'$[*].link' is not null;
    7. -- 查询任意项存在链接等于xxx属性的商品
    8. select * from test2 where JSON_CONTAINS(desc_attrs,JSON_OBJECT('link', 'xxx'));
    复制代码
    注意
    1. -- [{"link":"xxx"}]
    2. select desc_attrs->'$[*].link' from test2 where id=2;
    3. -- 查询结果为`["xxx"]`
    4. -- 返回每一项的link,所以是个数组
    复制代码
    到此这篇关于MySQL JSON类型数据查询的文章就介绍到这了,更多相关MySQL JSON类型数据查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/database/33979142i.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表