[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 } ? ?返回的结果就是上面截图这种形式了. ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |