Преобразование столбцов перечисления в поля

0

У меня есть таблица, содержащая 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 других запросов и отображаемый как одна таблица.

  • 0
    Сочетание схемы таблицы с полями user_id , name и value с запросами ссылающихся полей , как age , job , и salary немного сбивает с толку, есть другая таблица участвует, а?
Теги:
go

2 ответа

0

Во-первых, запросы должны выглядеть так.

 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 строка.

  • 0
    Я думаю, мистер @Frank, что решение UNION для выбора одного поля здесь у меня есть два собирать разные поля
  • 0
    На самом деле я не уверен, что для использования UNION это требование, но я все равно удалил эту часть, чтобы избежать путаницы. Я думаю, что приведенный выше код должен хорошо работать для вас.
-1

вы можете создать карту с ключом = user_id и value = user struct

определить структуру и карту пользователя:

type user struct{
    age    string
    salary string
    job    string
}
user := make(map[int]user)

получить все данные из таблицы и начать загружать их на свою карту

  • 0
    спасибо @Jilan, но это далеко от того, что я работаю над проблемой, как я объяснил, это получение данных из нескольких запросов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню