首页 > 数据库 >mysql json类型数据查询

mysql json类型数据查询

时间:2023-10-17 16:57:57浏览次数:34  
标签:color material JSON 查询 json mysql test desc

1、json对象

1.1、方法

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

1.2、数据

CREATE TABLE `test` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `goods_sn` varchar(25) NOT NULL DEFAULT '' COMMENT '商品编码',
  `desc_attr` json NOT NULL COMMENT '描述属性',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='TEST';

INSERT INTO `test`.`test`(`id`, `goods_sn`, `desc_attr`) VALUES (1, 'A0001', '{\"tag\": [\"GRS\", \"GOTS\"], \"size\": \"M\", \"color\": \"红色\", \"material\": \"尼龙\"}');
INSERT INTO `test`.`test`(`id`, `goods_sn`, `desc_attr`) VALUES (2, 'A0002', '{\"tag\": [\"GRS\", \"GOTS\", \"MTD\"], \"size\": \"LA\", \"color\": \"黄色\", \"material\": \"纯棉\"}');
{
	"tag": ["GRS", "GOTS"], 
	"size": "M", 
	"color": "红色", 
	"material": "尼龙"
}

1.3、查询

-- 查询面料不为空的商品
select * from test where desc_attr->'$.material' is not null;
select * from test where JSON_EXTRACT(desc_attr, '$.material') is not null;

-- 查询面料为纯棉的商品
select * from test where desc_attr->'$.material'='纯棉';
select * from test where JSON_EXTRACT(desc_attr, '$.material')='纯棉';

-- 查询标签数量大于2的商品
select * from test where JSON_LENGTH(desc_attr->'$.tag')>2;

2、json数组

2.1、方法

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

2.2、数据

CREATE TABLE `test2` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `goods_sn` varchar(25) NOT NULL DEFAULT '' COMMENT '商品编码',
  `desc_attrs` json NOT NULL COMMENT '描述属性,多个',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='TEST2';

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\": \"纯棉\"}]');
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\": \"纯棉\"}]');
INSERT INTO `test`.`test2`(`id`, `goods_sn`, `desc_attrs`) VALUES (3, 'A0003', '[]');
[
    {
        "tag":["GRS", "GOTS"],
        "size":"M",
        "color":"红色",
        "material":"尼龙"
    },
    {
        "tag":["GRS", "GOTS", "MTD"],
        "size":"LA",
        "color":"黄色",
        "material":"纯棉"
    }
]

2.3、查询

-- 查询描述属性不为空的商品
select * from test2 where JSON_LENGTH(desc_attrs) > 0;

-- 查询第1项存在颜色属性的商品
select * from test2 where desc_attrs->'$[0].color' is not null;

-- 查询任意项存在链接属性的商品
select * from test2 where desc_attrs->'$[*].link' is not null;

-- 查询任意项存在链接等于xxx属性的商品
select * from test2 where JSON_CONTAINS(desc_attrs,JSON_OBJECT('link', 'xxx'));
  • 注意
-- [{"link":"xxx"}]
select desc_attrs->'$[*].link' from test2 where id=2;
-- 查询结果为`["xxx"]`
-- 返回每一项的link,所以是个数组
     

标签:color,material,JSON,查询,json,mysql,test,desc
From: https://www.cnblogs.com/rxbook/p/17770102.html

相关文章

  • SpringBoot 02 shiro框架查询用户权限与角色
      实体类 @Data@AllArgsConstructor@NoArgsConstructor@TableName("t_user")publicclassRUser{@TableId(value="id",type=IdType.AUTO)privateIntegerusrId;privateStringusrName;privateStringusrAccount;pri......
  • fastjson JSONValidator 的使用记录
    在api的对接过程中,对方api总是会返回一些意想不到的格式回来,虽然你们已经约定好了使用json的方式返回!! 在调用一个api接口的时候结果就像薛定谔的猫是一个不确定的形态. 按照我之前的操作逻辑1判断结果空if(StringUtils.isEmpty(result)){return"结果空";}2......
  • 线上mongo慢查询可能原因影响
    mongo主从节点影响python中pymongo库的MongoClient类中readPreference参数可选主从(primary,secondary),不指定默认为主节点线上部署的时候其实是有指定主从节点的连接类,但是后期开发在基类中从节点的方法逐渐被替代,导致后期的业务的查询压力来到了主节点......
  • Ubuntu 中 Mysql的简单使用
    起因:建立web服务器时需要使用数据库去保存用户名和密码。//建立yourdb库createdatabaseyourdb;//创建user表USEyourdb;CREATETABLEuser(usernamechar(50)NULL,passwdchar(50)NULL)ENGINE=InnoDB;//添加数据INSERTINTOuser(username,passwd)......
  • Oracle中如何根据查询sql片段定位查询客户端主机地址
    --1.根据sql片段获取sql_id--select*fromv$sqlwherelast_active_time>sysdateandsql_textlike'%ZL0204_03r%';selectsql_id,modulefromv$sqlwherelast_active_time>sysdateandsql_textlike'%ZL0204_03%';--2.根据sql_id查询sid......
  • docker 安装 nginx tomcat mysql
    dockersearchnginxdockerpullnginx//在root目录下创建nginx目录用于储层nginx数据信息mkdir~/nginxcdnginxmkdirconfcdconf把nginx.conf文件拷贝到~/nginx/con目录下cd~/nginxdockerrum-id--namenginx01\-p80:80\-v$PWD/conf/nginx.conf:/etc/nginx/n......
  • MySQL八股基础
    1.执行一条select语句,期间会发生什么?连接器:建立连接,管理连接,校验用户身份。查询缓存,查询语句命中直接返回,否则继续往下执行。MySQL8.0删除。解析器:解析SQL语句,对select语句执行词法分析、语法分析,构建语法树,方便后续模块读取表名、字段、语句类型。执行SQL语句。分为3个阶......
  • MySQL基本语法和数字马力笔试
    1.DROPDATABASENAME;删除名字为NAME的数据库2.VARCHAR(10);可存储的最大字符长度为103.SELECTIDFROM表;从表中检索出ID的列4.DISTINCT搜索去重5.select两列时,用逗号分隔开6.排序orderby(默认升序,desc降序)7.按两种排序orderbya,b;8.selectquantity,item_pricefromOrderIt......
  • linux安装mysql5.7
    wget-i-chttp://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum-yinstallmysql57-community-release-el7-10.noarch.rpmyum-yinstallmysql-community-server--nogpgchecksystemctlstartmysqld.servicesystemctlstatusmysqld.servi......
  • Linux MySQL8.1 二进制安装和配置
    下载bin文件https://dev.mysql.com/downloads/mysql/选择LinuxGeneric,下载对应的tar包解压tar包解压完成后,目录结构如下:lsbindocsincludelibLICENSEmanREADMEsharesupport-files每个目录的内容,官方文档有说明DirectoryContentsofDirectorybi......