1、json对象
1.1、方法
- 使用对象操作的方法进行查询:
字段->'$.json属性'
- 使用函数进行查询:
json_extract(字段, '$.json属性')
- 获取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、方法
- 对象操作方式查询:
字段->'$[0].属性'
- 使用函数查询:
JSON_CONTAINS(字段,JSON_OBJECT('json属性', '内容'))
- 获取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')); 注意 copy-- [{"link":"xxx"}] select desc_attrs->'$[*].link' from test2 where id=2; -- 查询结果为`["xxx"]` -- 返回每一项的link,所以是个数组
标签:color,mysql5.7,material,数据类型,--,JSON,test,desc From: https://www.cnblogs.com/xingxia/p/mysql_json.html