首页 > 解决方案 > 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 数据,我该如何对它们进行搜索?然后只检索与该搜索查询匹配的那些。

标签: javascriptmysqljsondatabaseextract

解决方案


在评论的帮助下,我找到了有效的答案。

这将在输入字符串时获取列,与您要查找的内容完全匹配。

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”且不区分大小写的字符串获取列,因此将获取所有匹配的行。

--


推荐阅读