Как заполнить сложную структуру в Go, одним запросом c БД mysql?

У нас есть 2 таблицы:
таблица №1
Учителя
id   class       teacher_name
1     1a          Мария Ивановна
2     1б          Евгения Васильевна
3     1в          Анастасия Юрьевна


таблица №2
Ученики
id     class     fio                             age
1       1c        Петров Иван                     7
2       1a        Егоров Василий                  7
3       1a        Анастасия Юрьевна               6


У нас есть структуры
type Student type{
    Fio      string     `json:"fio" db:"fio"`
    Age      string     `json:"age" db:"age"`
}

type MyClass type{
    Class                    string           `json:"class" db:"class"`
    TeacherName              string           `json:"teacher_name" db:"teacher_name"`
    Students                 []Student      `json:"students" db:"students"`
}

должно получиться что то вроде:
{
  "class":"1a",
  "teacher_name":"Мария Ивановна",
  "students":[
                      {
                        "fio":"Егоров Василий"
                        "age":7
                      },
                      {
                        "fio":"Анастасия Юрьевна"
                        "age":6
                      }
                  ]
}
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
yellow79
@yellow79
Senior Software Engineer
Примерно как-то так:
const query = `
SELECT 
    A.class, A.fio, A.age, B.teacher_name
FROM 
    students A 
	LEFT JOIN teachers B ON A.class = B.class`

func scan(db *sql.DB) (*MyClass, error) {
	rows, err := db.Query(query)
	if err != nil {
		return nil, err
	}
	class := MyClass{}
	for rows.Next() {
		var a, b, c, d string
		if err := rows.Scan(&a, &b, &c, &d); err != nil {
			return nil, err
		}
		class.Class = a
		class.TeacherName = d
		class.Students = append(class.Students, Student{Age: c, Fio: b})
	}
	return &class, nil
}


Возможно есть ошибки, код не проверял, накидал "на коленке", думаю смысл должен быть понятен
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Cryptology Москва
от 3 000 до 3 500 eur.
EVEN Foundation Москва
от 130 000 руб.
Xsolla Пермь
от 50 000 до 120 000 руб.
20 авг. 2019, в 12:31
500 руб./в час
20 авг. 2019, в 11:47
3000 руб./за проект
20 авг. 2019, в 11:35
3000 руб./за проект