mysql关于json查询及laravel使用json查询

本文介绍了如何在MySQL中对JSON字段进行查询,包括单级字段查询和对象数组类型的查询,并提供了Laravel框架下的使用示例。示例中展示了如何通过`JSON_EXTRACT`和`JSON_CONTAINS`函数来过滤数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正常json字段查询


1,插入数据

CREATE TABLE `posts` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `content` json DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;
INSERT INTO `posts` (`id`, `user_id`, `content`, `created_at`, `updated_at`)
VALUES
    (1, 1, '{\"id\":1,\"name\":\"大学生物必修课\",\"json_string\":{\"title\":\"课程1\",\"content\":\"母猪的产后护理\"}}', NULL, NULL),
    (2, 2, '{\"id\":2,\"name\":\"大学高数必修课\",\"json_string\":{\"title\":\"课程2\",\"content\":\"高斯的魔幻童年\"}}', NULL, NULL),
    (3, 2, '{\"id\":3,\"name\":\"大学音乐必修课\",\"json_string\":{\"title\":\"课程3\",\"content\":\"烤面筋\"}}', NULL, NULL),
    (4, 3, '{\"id\":4,\"name\":\"大学医学必修课\",\"json_string\":{\"title\":\"课程4\",\"content\":\"公牛受孕\"}}', NULL, NULL);


此时posts表内content字段为关联数组型json

2,查询

SELECT * FROM `posts` WHERE content->'$.name' = '大学生物必修课';

如果有json多级,则使用.连接即可,例:
SELECT * FROM `posts` WHERE content->'$.pro.aa.name' = '大学生物必修课';

对象数组类型的json字段查询


1,插入数据

CREATE TABLE `log2` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `content` json DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
insert into `log2` (`id`, `content`, `created_at`) values('1','[{\"id\":\"141\",\"name\":\"xxx\",\"type\":\"input\"},{\"id\":\"142\",\"name\":\"xin\",\"type\":\"textarea\"}]',NULL);


2,查询

SELECT * FROM `log2` WHERE JSON_CONTAINS(content,JSON_OBJECT("name", "xxx"));
//注意:这两个双引号不能改,两个字段必须双引号包裹


3,laravel使用
 

$name = 'xxx';
$model->whereRaw('JSON_CONTAINS(content,JSON_OBJECT("name", "'.$name.'"))')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值