У меня есть таблица, содержащая 3 поля:
user_id
, name
, value
В таблице нет первичного ключа, user_id
может иметь повторяющиеся значения. Для name
указаны поля, возраст, работа и зарплата.
user_id | name | value
------------------------
1 | age | 20
------------------------
1 | job | IT
------------------------
2 | salary | 20000
------------------------
2 | job | Dev
------------------------
2 | age | 30
------------------------
Я хочу создать структуру, как показано ниже.
user_id | age | job | salary
----------------------------
1 | 20 | IT | NULL
----------------------------
2 | 30 | Dev | 20000
----------------------------
Основной запрос:
rows, err := db1.Query("select user_id from main_users");
for rows.Next() {
rows.scan(&user_id)
id := reflect.ValueOf(user_id)
user_idvalue := id.Interface().(int)
rows1, err1 := db1.Query("select age from users where user_id=$1", user_idvalue)
rows2, err2 := db1.Query("select job from users where user_id=$1", user_idvalue)
rows3, err3 := db1.Query("select salary from users where user_id=$1", user_idvalue)
}
Я застрял на части с каждой строкой результата идентификатор, сравниваемый для 3 других запросов и отображаемый как одна таблица.
Во-первых, запросы должны выглядеть так.
userAgeValues, err1 := db1.Query("select value from users where user_id=$1 and name=\"age\";", user_idvalue)
userJobValues, err2 := db1.Query("select value from users where user_id=$1 and name=\"job\"", user_idvalue)
userSalaryValues, err3 := db1.Query("select value from users where user_id=$1 and name=\"salary\"", user_idvalue)
Тогда у вас есть эти ценности, чтобы делать то, что вы хотите. На основе вашего описания в каждом из этих результатов должно быть только 1 строка.
вы можете создать карту с ключом = user_id и value = user struct
определить структуру и карту пользователя:
type user struct{
age string
salary string
job string
}
user := make(map[int]user)
получить все данные из таблицы и начать загружать их на свою карту
user_id
,name
иvalue
с запросами ссылающихся полей , какage
,job
, иsalary
немного сбивает с толку, есть другая таблица участвует, а?