sql - db.Query with sql join error列上的扫描错误

标签 sql go

错误!!!

Scan error on column index 1, name "url": unsupported Scan, storing driver.Value type []uint8 into type *[]handle.Movie


https://gyazo.com/7532a1c3793c892e721054998865609d

https://gyazo.com/278066e6da16f13cd9c56874beb71026
type Movie struct {
    ID         int
    Url        string
    CategoryID uint
}

type Category struct {
    ID     int
    Name   string
    Movies []Movie
}


func Connected() []Category { 
    db := ConnectDB()
    defer db.Close()

    //sql
    query := `SELECT c.name,m.url FROM categories c left join movies m on c.id = m.category_id`

    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }

    var sli []Category
    var v1 Category   
    for rows.Next() {

        if err := rows.Scan(&v1.Name, &v1.Movies); err != nil {
            log.Fatal(err)
        }

        sli = append(sli, v1)
    }
    fmt.Println(sli[0].Movies)
    return sli
}


我想达到这个结果!!!

[{1 aaa [https // you ...,https // you ...],2 bbb [https / you ...]}]

我想看一部电影,该电影按类别关联按 slice 链接

----------------------------- PS -------------------- -------------

这就是我想做的!!!
func Connected() []Category {
    db := ConnectDB()
    defer db.Close()

    //sql
    query := `SELECT c.id, c.name, m.id, m.url FROM categories c left join movies m on c.id = m.category_id ORDER BY c.id ASC`
    rows, err := db.Query(query)
    if err != nil {
        log.Fatal(err)
    }

    var sli []Category
    var c Category 

    var m Movie

    for rows.Next() {
        if err := rows.Scan(&c.ID, &c.Name, &m.ID, &m.Url); err != nil {

            log.Fatal(err)
        }
        m.CategoryID = c.ID
        l := len(sli)
        if l > 0 && sli[l-1].ID == c.ID {
            sli[l-1].Movies = append(sli[l-1].Movies, m)

        } else {
            if len(c.Movies) != 0 {
                c.Movies = remove(c.Movies, c.Movies[0])
            }

            c.Movies = append(c.Movies, m)
            sli = append(sli, c) 


        }
    }
    return sli
}



func remove(ints []Movie, search Movie) []Movie {
    result := []Movie{}
    for _, v := range ints {
        if v != search {
            result = append(result, v)
        }
    }
    return result
}


感谢大家

最佳答案

就像我看到的那样,您正在尝试将单个URL存储到Movie结构的数组中,这是不可能的。
您的查询可能会返回每个类别的所有URL,但是每个URL都位于一行中,因此您应该将其汇总。
据我所知,您应该将数据扫描到Golang默认类型中,而不是自定义结构中。将数据映射到自定义结构是另一回事。

这是一个示例代码,但是我无权访问您的数据库,因此我无法对其进行测试,但它应该可以根据您的需要工作。

type Movie struct {
ID         int
Url        string
CategoryID uint
}

type Category struct {
ID     int
Name   string
Movies []Movie
}


func Connected() []Category { 
db := ConnectDB()
defer db.Close()

//sql
query := `SELECT c.id, c.name, m.id, m.url FROM categories c left join movies m on c.id = m.category_id 
ORDER BY c.id ASC`

rows, err := db.Query(query)
if err != nil {
    log.Fatal(err)
}

var sli []Category
var v1 Category
var m Movie
for rows.Next() {
    if err := rows.Scan(&v1.ID, &v1.Name, &m.ID, &m.Url); err != nil {
        log.Fatal(err)
    }
    m.CategoryID = v1.ID
    l := len(sli)
    if l > 0 && sli[l - 1].ID == v1.ID {
        sli[l - 1].Movies = append(sli[l - 1].Movies, m)
    } else {
        v1.Movies = append(v1.Movies, m)
        sli = append(sli, v1)
    }
}
fmt.Println(sli[0].Movies)
return sli
}

关于sql - db.Query with sql join error列上的扫描错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59608763/

相关文章:

mysql - SQL 联合查询简化

go - 安装带有依赖项的 go 包

go - 为什么 'tick := time.Tick(time.Second)' 每 2 秒滴答一次而不是 1 秒

c# - 需要数据库建议->柱状,嵌入式(如果可能)

mysql - 如何每次为特定团队返回唯一的消息

json - 字符串编码数字的自定义 JSON 解码

go - k8s go client : how to pass a v1. 函数的部署类型

go - 如何解决 "No ' Access-Control-Allow-Origin' header 出现在请求的资源上”

php - mysql如何按年龄选择条件的记录

mysql - SQL内部连接顺序问题