javascript - MySQL JSON 搜索提取
问题描述
我目前正在将 JSON 对象输入到 MySQL 数据库,然后想对它们运行查询。所以我有一张如下表:
subjects |
---------------------------------------------------------
|{
|"subjects": [{
| "subject":"English Language & Literature",
| "ageRange":["12-18"],
| "examlevel":["13+","gcse","as-level","a-level"],
| "examboard":["aqa","edexcel","ocr","wjec"]
|},
|{
| "subject":"Creative Writing",
| "ageRange":["8-18"], | Row 1
| "examlevel":null,
| "examboard":null
|},
|{
| "subject":"Media Studies",
| "ageRange":["14-18"],
| "examlevel":["gcse","as-level","a-level"],
| "examboard":["aqa","edexcel","ocr","wjec"]
|}]
|}
---------------------------------------------------------
在我运行的 MySQL 查询中
SELECT JSON_EXTRACT(subjects, '$."subjects"') FROM `table_name`
我得到这个回应
[{"subject": "English Language & Literature", "age...
为了获得主题名称,我做了以下...
SELECT JSON_EXTRACT(subjects, '$."subjects[*]."subject"') FROM `table_name`
这返回
["English Language & Literature", "Creative Writin...
然后我尝试对 JSON 提取运行搜索查询
SELECT JSON_EXTRACT(subjects, JSON_UNQUOTE(JSON_SEARCH(subjects, 'all', '{Search Query i.e "E"}', NULL, '$."subjects"[*]."subject"'))) FROM `table_name`
这个 ^^ 返回 NULL
我想进一步查询这个。所以我想最终从这个对象组中每个主题的每个 JSON 对象中提取主题名称。实际上,当您搜索主题时,它会搜索每个 JSON 对象中每个主题字段的主题名称以获取与搜索查询相关的结果。
我查看了 MySQL Docs 并没有太大帮助... - 现在我已经提取了提取的 JSON 数据,我该如何对它们进行搜索?然后只检索与该搜索查询匹配的那些。
解决方案
在评论的帮助下,我找到了有效的答案。
这将在输入字符串时获取列,与您要查找的内容完全匹配。
SELECT JSON_EXTRACT(subjects, JSON_UNQUOTE(JSON_SEARCH(subjects,'all','Creative Writing', NULL, '$."subjects"[*]."subject"'))) FROM `table_name`
--
SELECT JSON_EXTRACT(subjects, JSON_UNQUOTE(JSON_SEARCH(LOWER(subjects),'all',LOWER('%eng%'), NULL, '$."subjects"[*]."subject"'))) FROM `table_name`
这将使用包含字符“eng”且不区分大小写的字符串获取列,因此将获取所有匹配的行。
--
推荐阅读
- c++ - 如何在不指定模板类型的情况下声明通用抽象类的对象
- opencart - 如何在管理面板中删除广告 opencart
- google-cloud-platform - 游戏服务器 - 高延迟
- swift - 如果 swift 表格视图中有更多(大约 10 到 20 个)部分,如何返回部分值?
- java - 如何将某些未知语言环境中的字符串日期转换为其他已知语言环境?
- python-3.x - 如何使用 cv2.waitKey() 等待两个不同的键
- cron - 每两周运行一次任务的 Cron 作业
- python-3.x - Postgres sql Inner join 和 Delete 查询都返回不同的结果
- bash - 在 Mac OS 的自动化操作中运行“pod install” - 权限被拒绝
- android - React-native release apk 拒绝安装