将枚举列值转换为字段

6l7fqoea  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(294)

我有一个包含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个查询的id进行比较的每个结果行的部分,并显示为一个表。

rsaldnfx

rsaldnfx1#

首先,查询应该如下所示。

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)

然后这些值与你想要的有关。根据您的描述,每个结果中应该只有一行。

cygmwpex

cygmwpex2#

您可以使用key=user\u id和value=user struct创建一个Map
定义用户结构和Map:

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

从表中获取全部数据并开始将其加载到Map中

相关问题