goland gorm分组查询统计_GORM高级查询

本文详细介绍了在Golang中使用GORM库进行高级查询操作,包括:基本查询、Where条件查询、Or条件查询、选择字段查询、子查询、排序、分页以及统计总数。示例代码涵盖多种查询场景,适用于Go语言的数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

models

nav.go

package models

type Nav struct {

Id int `json:"id"`

Title string `json:"title"`

Url string `json:"url"`

Status int `json:"status"`

Sort int `json:"sort"`

}

func (n Nav) TableName() string {

return "nav"

}

controllers

nav.go

package controllers

import (

"beegogorm/models"

"github.com/astaxie/beego"

)

type NavController struct {

beego.Controller

}

func (c *NavController) Get() {

// 查询全部数据

nav := []models.Nav{} // nav实例,查询的数据是集合

models.DB.Find(&nav) // &nav 把查到的数据赋值给nav

// 查询一条数据

nav := models.Nav{Id: 3} // 获取Id等于3的数据

models.DB.Find(&nav)

/*

1、Where条件

=

<

>

<=

>=

!=

IS NOT NULL

IS NULL

BETWEEN AND

NOT BETWEEN AND

IN

OR

AND

NOT

LIKE

*/

// 查询id大于3的数据

nav := []models.Nav{}

models.DB.Where("id<3").Find(&nav)

// 查询id大于5的数据

var n = 5

nav := []models.Nav{}

models.DB.Where("id>?", n).Find(&nav) // 动态的数据使用占位符

var n1 = 3

var n2 = 9

nav := []models.Nav{}

models.DB.Where("id > ? AND id < ?", n1, n2).Find(&nav)

// 查询id等于3 5 6的数据

nav := []models.Nav{}

models.DB.Where("id in (?)", []int{3, 5, 6}).Find(&nav)

// 查询标题有 会 的数据

nav := []models.Nav{}

models.DB.Where("title like ?", "%会%").Find(&nav)

// 查询id在什么之间

nav := []models.Nav{}

models.DB.Where("id between ? and ?", 3, 6).Find(&nav)

/*

2、Or 条件

*/

nav := []models.Nav{}

models.DB.Where("id=? OR id=?", 2, 3).Find(&nav)

// 另一种写法

nav := []models.Nav{}

models.DB.Where("id=?", 2).Or("id=?", 3).Or("id=4").Find(&nav)

/*

3、选择字段查询

*/

nav := []models.Nav{}

models.DB.Select("id, title, url").Find(&nav)

/*

4、SubQuery 子查询

models.DB.Table("user").Select("avg(age)").SubQuery()

*/

user := []models.User{}

// 先查出平均年龄 models.DB.Table("user").Select("avg(age)").SubQuery()

// 在当做参数传给问号

// 在Find一下

models.DB.Where("age", models.DB.Table("user").Select("avg(age)").SubQuery()).Find(&user)

c.Data["json"] = user

c.ServeJSON()

/*

5、排序 Limit 、Offset

*/

nav := []models.Nav{}

// id Asc 按照id进行升序排序

// desc 降序

models.DB.Where("id>2").Order("id Asc").Find(&nav)

nav := []models.Nav{}

models.DB.Where("id>2").Order("sort Desc").Order("id Asc").Find(&nav)

// 只要前面两条

nav := []models.Nav{}

models.DB.Where("id>1").Limit(2).Find(&nav)

// 跳过2条查询2条

nav := []models.Nav{}

models.DB.Where("id>1").Offset(2).Limit(2).Find(&nav)

/*

6、总数

*/

// 分页时用到

nav := []models.Nav{}

var num int

models.DB.Where("id > ?", 2).Find(&nav).Count(&num)

c.Data["json"] = num

c.ServeJSON()

// 上面每一个nav,都需要封装和返回,只写一个在这

c.Data["json"] = nav // 封装json

c.ServeJSON() // 返回json

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值