使用MySQL JSON函数可直接在数据库层处理JSON数据,提升效率。通过JSON_EXTRACT、JSON_CONTAINS和JSON_SET实现查询与更新;在PHP中用json_decode和json_encode进行数组与JSON字符串转换;为高频查询字段创建冗余列并加索引以优化性能。

如果您需要在PHP中处理数据库中的JSON格式数据,尤其是对非结构化数据进行读取、解析和存储操作,可能会遇到数据类型转换或查询效率问题。以下是针对此类场景的解决方案。
本文运行环境:MacBook Pro,macOS Sonoma
一、使用MySQL JSON函数直接操作JSON字段
现代MySQL版本支持原生JSON数据类型及内置函数,可以直接在SQL语句中解析和查询JSON内容,避免在PHP层进行复杂处理。
1、确保数据库表中存在JSON类型的字段,例如名为profile的列。
立即学习“PHP免费学习笔记(深入)”;
2、使用JSON_EXTRACT()函数提取指定路径的数据:SELECt JSON_EXTRACT(profile, '$.name') AS user_name FROM users;
3、利用JSON_ConTAINS()判断JSON字段是否包含特定值:SELECt * FROM users WHERe JSON_ConTAINS(profile, '"developer"', '$.skills');
4、通过JSON_SET()更新某个键的值:UPDATE users SET profile = JSON_SET(profile, '$.age', 28) WHERe id = 1;
二、在PHP中解析和构建JSON数据
当需要在应用层处理JSON字段时,可借助PHP内置的json_decode()与json_encode()函数实现数组与JSON字符串之间的转换。
1、从数据库读取JSON字符串后,调用json_decode()将其转为关联数组:
注意:第二个参数必须设为true以返回数组而非对象
$data = json_decode($row['profile'], true);
即构数智人 即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。
36 查看详情
2、修改数组中的值,例如添加新的属性:$data['last_login'] = date('Y-m-d H:i:s');
3、将修改后的数组重新编码为JSON字符串:$jsonString = json_encode($data, JSON_UNESCAPED_UNICODE);
4、将结果写回数据库:UPDATE users SET profile = ? WHERe id = ?
三、预处理JSON数据以提升查询性能
频繁查询JSON内部字段会影响性能,可通过生成冗余字段并建立索引的方式优化检索速度。
1、在表中新增一个常规字段用于存储JSON中的关键值,例如创建user_city字段保存城市信息。
2、在插入或更新JSON字段的同时,同步提取该值:
$city = $data['address']['city'] ?? null;
3、执行INSERT或UPDATE时,同时设置user_city字段的值。
4、为user_city字段创建B树索引:CREATE INDEX idx_user_city ON users(user_city);
此方法能显著加快基于城市字段的查询响应时间
以上就是php数据库JSON数据操作_php数据库非结构化数据处理的详细内容,更多请关注php中文网其它相关文章!


