加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[Go] 在gin框架gorm下查询一对多的数据

发布时间:2021-05-21 06:49:50 所属栏目:大数据 来源: https://www.jb51.cc
导读:go-fly客服系统快捷回复功能,需要获取到分组名以及分组名下的回复内容 数据库的表结构是,group_id是关联字段,user_id是用户id: CREATE TABLE `reply_group` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT,`group_name` varchar( 50 ) NOT NULL DEFAULT '' ,`us

go-fly客服系统快捷回复功能,需要获取到分组名以及分组名下的回复内容

数据库的表结构是,group_id是关联字段,user_id是用户id:

CREATE TABLE `reply_group` (
 `id` int(11) NOT NULL AUTO_INCREMENT,`group_name` varchar(50) NOT NULL DEFAULT '',`user_id` varchar(utf8

CREATE TABLE `reply_item` (
 `id` 1024) NOT NULL DEFAULT 11) NOT NULL DEFAULT '0'=InnoDB DEFAULT CHARSET=utf8

可以使用下面这种形式变通实现,查询两条sql语句,程序中对返回的结果进行合并处理

为了不进行嵌套循环,使用空间换时间的方式增加了map[string]*ReplyGroup? 映射?,再利用指针的原理,直接往结构体成员上增加元素

models下的代码

package models

type ReplyItem struct {
    Id       string `json:"item_id"`
    Content  item_content`
    GroupId  group_id`
    ItemName item_name`
    UserId   user_id`
}
type ReplyGroup  {
    Id        string       `json:`
    GroupName group_name`
    UserId    `
    Items     []*ReplyItem `json:items";`
}

func FindReplyByUserId(userId interface{}) []*ReplyGroup {
    var replyGroups []*ReplyGroup
    //DB.Raw("select a.*,b.* from reply_group a left join reply_item b on a.id=b.group_id where a.user_id=? ",userId).Scan(&replyGroups)
    var replyItems []*ReplyItem
    DB.Where(user_id = ?",userId).Find(&replyGroups)
    DB.Where(replyItems)
    temp := make(map[string]*ReplyGroup)
    for _,replyGroup := range replyGroups {
        replyGroup.Items = make([]*ReplyItem,0)
        temp[replyGroup.Id] = replyGroup
    }
     range replyItems {
        temp[replyItem.GroupId].Items = append(temp[replyItem.GroupId].Items,replyItem)
    }
    return replyGroups
}

?

?返回的结果就是上面截图这种形式了.

?

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读