Каков наилучший способ извлечения результатов из курсора в формат 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. Я не знаю точно, что использовать. Я чувствую, что все, что я придумаю, будет полным беспорядком.