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

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

}

你可能感兴趣的:(goland,gorm分组查询统计)