gorm聚合查询group结合join和count
时间:2022-07-23
本文章向大家介绍gorm聚合查询group结合join和count,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
场景:engineercms的文章article放在了成果product下面,成果有作者user,以及所属的目录project
现在想知道,某个project下的各位作者文章数量。
推荐廖雪峰的sql教程,最大的特点是可以在网页上试验sql语言,其次是讲得非常实用。看完再结合gorm的文档。
思路就是通过article表来分别join成果product表、user表和project表,然后group里用productid来筛选,最后再用projectid筛选。
//项目目录
type Project struct {
Id int64 `form:"-"`
Code string `orm:"null"` //编号
Title string `form:"title;text;title:",valid:"MinSize(1);MaxSize(20)"` //orm:"unique",
}
//目录里的成果表
type Product struct {
Id int64
Code string `orm:"null"` //编号
Title string `form:"title;text;title:",valid:"MinSize(1);MaxSize(20)"`
Label string `orm:"null"` //标签
Uid int64 `orm:"null"`
Principal string `orm:"null"` //提供人
ProjectId int64 `orm:"null"` //目录projectid
TopProjectId int64 `orm:"default(0)"` //项目id
}
//用户表
type User struct {
Id int64
Username string `json:"name",orm:"unique"` //这个拼音的简写
Nickname string //中文名
}
//文章表,文章放在成果下面,所以文章没有直接对应作者,而是通过product成果来查作者
type Article struct {
Id int64 `json:"id",form:"-"`
Subtext string `orm:"sie(20)"`
Content string `json:"html",orm:"sie(5000)"`
ProductId int64 `orm:"null"`//成果下面的文章
Views int64 `orm:"default(0)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now_add;type(datetime)"`
}
//查询返回新建的结构体-取出用户文章数目
type Result struct {
Usernickname string `json:"name"`
Productid int64
Total int64 `json:"value"`
}
func GetWxUserArticles(pid int64) (results []*Result, err error) {
db := GetDB()
db.Order("total desc").Table("article").Select("product_id as productid, count(*) as total,user.nickname as usernickname").
Joins("left JOIN product on product.id = article.product_id").
Joins("left JOIN user on user.id = product.uid").Group("product.uid").
Joins("left JOIN project on project.id = product.project_id").Where("project.id=?", pid).
Scan(&results)
return results, err
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- WebRTC架构图说明
- java安全编码指南之:Mutability可变性
- RocketMQ 消息丢失场景分析及如何解决!
- Gopro Ardunio控制库.3
- GoPro Arduino控制库.阅读源码.1
- [漏洞复现] 二.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
- 本地scratch-gui和blockly安装
- 用Python打造一款文件搜索工具,所有功能自己定义!
- 解决SSH登录缓慢
- Html ul、li Css标签详解 使用图片自定义样式 隐藏小点样式齐全
- TRTC Android端开发接入学习之实现视频通话(五)
- 让WordPress默认用户无法进入后台
- 图像处理笔记(2)----OpenCV imread函数详解
- 面试官:来写个代码求一下两个数的最大公约数吧
- 聊聊BitCaskLock