Как заполнить сложную структуру в 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
                      }
                  ]
}
  • Вопрос задан
  • 114 просмотров
Решения вопроса 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
}


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

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

Войти через центр авторизации
Похожие вопросы
LifeStyle platform Москва
от 180 000 до 250 000 ₽
Enapter Санкт-Петербург
от 160 000 до 240 000 ₽
от 200 000 до 300 000 ₽
21 февр. 2020, в 11:29
6000 руб./за проект
21 февр. 2020, в 11:08
1000 руб./за проект
21 февр. 2020, в 10:39
1000 руб./в час