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 文档,但没有太大帮助... - 现在我已经提取了提取的 JSON 数据,如何对它们运行搜索?然后仅检索与该搜索查询匹配的内容。


米脂
浏览 97回答 1
1回答

当年话下

在评论的帮助下,我找到了可行的答案。当输入的字符串与您要查找的内容完全匹配时,这将获取列。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”的字符串的列,并且不区分大小写,因此将获取所有匹配的行。--
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript