项目需求,某字段需要存储json字符串,便于操作,选择了mysql5.7刚出不久的json.
要求:
1.php版本 5.6.9以上 (果断换成了php7)
2.mysql 5.7.*
新特性:
mysql 除了原来的字段类型 int,varchar, text ……以外,有了json类型
我们可以根据需求对json字符串中的某一个字段进行操作
例如表 user:
一个简单的json串:
{
"mail":"[email protected]",
"name":"1111",
"address":"Shangahai"
}
我们可以灵活的取出json字符串中的某个字段当做数据表中的字段灵活的操作
增加
数据(添加的必须是json字符串,不是则会报错)
正常的添加sql
查询
取出info中的name
select uid,json_extract(info,'$.name') as name from user
/**
yii2.0 中
*/
$model = User::findOne(["JSON_EXTRACT(info,'$.name')" => 'Amy']);
删除
update user set info = json_remove(info,'$.name') where json_extract(info,'$.name') = 'Amy'
修改
update user set info = json_replace(info,'$.name',"1111") where json_extract(info,'$.name') = 'David'
json_replace(json字段,json中小字段,最后改的值)
当json字符串是json数组时
eg:
{
"programmers": [{
"firstName": "Brett",
"lastName": "McLaughlin",
"email": "aaaa"
}, {
"firstName": "Jason",
"lastName": "Hunter",
"email": "bbbb"
}, {
"firstName": "Elliotte",
"lastName": "Harold",
"email": "cccc"
}],
"authors": [{
"firstName": "Isaac",
"lastName": "Asimov",
"genre": "sciencefiction"
}, {
"firstName": "Tad",
"lastName": "Williams",
"genre": "fantasy"
}, {
"firstName": "Frank",
"lastName": "Peretti",
"genre": "christianfiction"
}],
"musicians": [{
"firstName": "Eric",
"lastName": "Clapton",
"instrument": "guitar"
}, {
"firstName": "Sergei",
"lastName": "Rachmaninoff",
"instrument": "piano"
}]
}
查询json数组里某一个字段:
SELECT json_extract(person_desc,'$.programmers[0].email') from json_test