mysql-json查询

dsf9zpds  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(460)

我在查询mysql5.7.xjson数据时遇到问题。
我在字段中存储了以下json activities . 我想搜索结果为\u id=418的活动
我的table上有一张 student_id 值为10的字段和 activities 现场。

  1. {
  2. "activities": [
  3. {
  4. "activity": "Quiz from pages 100-102",
  5. "comments": "comments",
  6. "outcomes": [
  7. {
  8. "outcome_id": "418",
  9. "course": "English",
  10. "course_level": "2"
  11. },
  12. {
  13. "outcome_id": "419",
  14. "course": "English",
  15. "course_level": "2"
  16. },
  17. {
  18. "outcome_id": "420",
  19. "course": "English",
  20. "course_level": "2"
  21. },
  22. {
  23. "outcome_id": "600",
  24. "course": "Science",
  25. "course_level": "2"
  26. }
  27. ],
  28. "date_completed": "20180102"
  29. },
  30. {
  31. "activity": "Quiz from pages 200-250",
  32. "comments": "comments",
  33. "outcomes": [
  34. {
  35. "outcome_id": "518",
  36. "course": "English",
  37. "course_level": "2"
  38. },
  39. {
  40. "outcome_id": "519",
  41. "course": "English",
  42. "course_level": "2"
  43. }
  44. ],
  45. "date_completed": "20180102"
  46. }
  47. ]
  48. }

我有下面的php代码,但我没有得到任何结果。

  1. $query = ("SELECT
  2. activities->'$.activities[*].activity'
  3. FROM table WHERE
  4. JSON_EXTRACT(activities, '$.activities[*].outcomes[*].outcome_id') = '\"418\"' AND student_id = '10'
  5. ");

你知道我错在哪里吗?

gajydyqb

gajydyqb1#

我假设这个查询的期望输出是 "Quiz from pages 100-102" .
您的查询没有如您所想的那样工作: JSON_EXTRACT 将返回所有 outcome_id 正在使用指定的路径(在本例中, ["418", "419", "420", "600", "518", "519"] ). 你可以用 JSON_SEARCH 仅查找具有 outcome_id 像这样的418人中:

  1. JSON_SEARCH(activities, 'all', '418', NULL, '$.activities[*].outcomes[*].outcome_id')

返回字符串值 "$.activities[0].outcomes[0].outcome_id" 但我想不出任何办法 [0] 你的活动索引 SELECT 你真正想要的地方 SELECT activities->'$.activities[0].activity' .
总的来说,我不认为不用存储过程就可以使用内置的mysql json函数实现这一点。你最好的策略是

  1. SELECT activities FROM table WHERE student_id = 10

并在php中对结果进行后期处理(我假设您将json解码为一个名为 $json ):

  1. $selected = array();
  2. foreach ($json->activities as $activity) {
  3. foreach ($activity->outcomes as $outcome) {
  4. if ($outcome->outcome_id == '418') $selected[] = $activity->activity;
  5. }
  6. }
  7. print_r($selected);

输出:

  1. Array
  2. (
  3. [0] => Quiz from pages 100-102
  4. )
展开查看全部

相关问题