Генерация JSON с курсором в MySQL - PullRequest
0 голосов
/ 28 октября 2018

Каков наилучший способ извлечения результатов из курсора в формат JSON с использованием версии 5.7?

Мне нужно, чтобы JSON выглядел примерно так:

{
  "2018V": {
    "students": {
      "1": {
        "fName": "John",
        "dob": "4/8/1998",
        "classes": []
      },... and more student ID's
    }
  },... and more semesters
}

Мне посоветовали использовать только один курсор для извлечения большого количества данных вместо трех или четырех вложенных, поэтому курсор выглядит так:

DECLARE done BOOLEAN DEFAULT FALSE;
DECLARE infoJson JSON DEFAULT '{}';
DECLARE currSemester CHAR(10);
DECLARE currStudentID INT;
DECLARE currStudentName VARCHAR(140);
DECLARE currStudentSSN VARCHAR(10);
DECLARE currCourseNumber CHAR(10);
DECLARE curStudentsInfo CURSOR FOR SELECT `StudentCourses`.semester, `Students`.studentID, `Students`.studentName,`Students`.studentSSN, `StudentCourses`.courseNumber
FROM `StudentCourses`
INNER JOIN `Students` ON `StudentCourses`.studentID = `Students`.studentID
ORDER BY `StudentCourses`.semester;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;

OPEN curStudentsInfo;
infoLoop: LOOP
  FETCH curStudentsInfo INTO currSemester, currStudentID, currStudentName, currStudentSSN, currCourseNumber;
  IF done THEN
    CLOSE curStudentsInfo;
    LEAVE infoLoop;
  END IF;
  -- Code here
END LOOP infoLoop;

Данные, с которыми я работаю, выглядят примерно так:
Всего четыре человека и всего два семестра, но в базе данных намного больше.

semester    studentID   studentName studentSSN  courseNumber
--------------------------------------------------------
2018H       3           Birkir Geir 2001979230  GSF2A3U
2018H       3           Birkir Geir 2001979230  STÆ303
2018V       5           Reynir      1508984089  STÆ203
2018V       6           Róbert Ingi 1707001234  STÆ603
...

Теперь, какой подход я должен использовать здесь? Я пытался выяснить это в течение достаточно долгого времени, и мне просто так трудно кодировать подобные вещи в MySQL. Я не знаю точно, что использовать. Я чувствую, что все, что я придумаю, будет полным беспорядком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...