mysql的contains_mysql中json_contains、json_extract等json查询方法的使用

新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作。

JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,但是比XML简单,易读并且易编写。对机器来说易于解析和生成,并且会减少网络带宽的传输。

JSON的格式非常简单:名称/键值。之前MySQL版本里面要实现这样的存储,要么用VARCHAR要么用TEXT大文本。 MySQL5.7发布后,专门设计了JSON数据类型以及关于这种类型的检索以及其他函数解析。

其中json_contains、json_extract是很常用的查询数据方法。

1、json_extract使用,其中ThinkPHP5.1使用的json方法就是这个方法

根据表字段的json内容进行查询,需使用json_extract函数;表字段为content,json内容包含关键字method

查询语句:SELECT* FROMuser WHEREjson_extract(content,"$.method") = "POST";

//TP5.1查询

$data = \Db::name('user')->field('id,recommend,name,thumb,customer_id,cate_ids')->where($where)->where(function ($query) use ($cate_ids){

//闭包查询

foreach ($cate_ids as $key => $value) {

$whereOr = [];

$whereOr[] = ['cate_ids->cate_id_' . $value, '=', $value];

$query->whereOr($whereOr);

}

})->order($order)->page($page, $limit)->select();

2、json_contains、json_array的使用

cd12d485030f303fc28ee0c4f2713df1.png

要从此表中匹配到包含上述四个关键字中的任意若干个,可这样:

SELECT* FROMuser WHERE JSON_CONTAINS(JSON_ARRAY("我","想","销","存单"),keywords->'$.keywords') ORDER BY weights DESC;

执行结果:

1e44efe41e5c187c1e304952f692c443.png

另附上部分sql,以防之后忘记

SELECT * FROM user;

SELECT * FROM user WHERE keywords LIKE "%销%";

SELECT * FROM user WHERE JSON_EXTRACT(keywords,'$.keywords') LIKE "%销%";

SELECT * FROM user WHERE keywords -> '$.keywords' LIKE "%销%";

其中第三条sql和第四条sql是等效的。

//Tp5.1查询

$momo = \Db::query("select switchs->'$[*]' from timer where  JSON_CONTAINS(switchs->'$[*].id', '\"$id\"', '$') and JSON_CONTAINS(switchs->'$[*].fid', '\"$fid\"', '$') and JSON_CONTAINS(switchs->'$[*].pid', '\"$pid\"', '$')");

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值