当前位置: 首页 > news >正文

建设机械网站机构微信引流推广怎么找平台

建设机械网站机构,微信引流推广怎么找平台,哪里找做鸭子的网站,搜狗搜索太原运营中心怎么样【GORM】高级查询方案1.Struct & Map查询为空的情况2.FirstOrInit3.FirstOrCreate4.高级查询1.Struct & Map查询为空的情况 当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,‘’,false…

【GORM】高级查询方案

  • 1.Struct & Map查询为空的情况
  • 2.FirstOrInit
  • 3.FirstOrCreate
  • 4.高级查询

1.Struct & Map查询为空的情况

当通过结构体进行查询时,GORM将会只通过非零值字段查询,这意味着如果你的字段值为0,‘’,false或者其他零值时,将不会被用于构建查询条件,例如:

db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users)
// SELECT * FROM users WHERE name = "jinzhu";

可以使用指针或实现 Scanner/Valuer 接口来避免这个问题:

// 使用指针
type User struct {gorm.ModelName stringAge  *int
}// 使用 Scanner/Valuer
type User struct {gorm.ModelName stringAge  sql.NullInt64  // sql.NullInt64 实现了 Scanner/Valuer 接口
}

2.FirstOrInit

如果记录未找到,将使用参数初始化 struct:

var user User
// 未找到
db.Where(User{Name: "non_existing"}).Attrs(User{Age: 20}).FirstOrInit(&user)
// db.Where(User{Name: "non_existing"}).Attrs("age", 20).FirstOrInit(&user)
fmt.Println(user)  // {{0 0001-01-01 00:00:00 +0000 UTC 0001-01-01 00:00:00 +0000 UTC {0001-01-01 00:00:00 +0000 UTC false}} non_existing 20}
var user User
// 找到
db.Where(User{Name: "xiaoqian"}).Attrs(User{Age: 20}).FirstOrInit(&user)
fmt.Println(user)  // {{2 2023-03-09 21:21:06 +0800 CST 2023-03-09 21:21:06 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} xiaoqian 22}

不管记录是否找到,都将参数赋值给 struct:

// 未找到
db.Where(User{Name: "non_existing"}).Assign(User{Age: 20}).FirstOrInit(&user)
 user -> User{Name: "non_existing", Age: 20}// 找到
db.Where(User{Name: "Jinzhu"}).Assign(User{Age: 30}).FirstOrInit(&user)
 SELECT * FROM USERS WHERE name = jinzhu';
 user -> User{Id: 111, Name: "Jinzhu", Age: 30}

3.FirstOrCreate

获取匹配的第一条记录, 否则根据给定的条件创建一个新的记录 (仅支持 struct 和 map 条件)

// 未找到
db.FirstOrCreate(&user, User{Name: "non_existing"})
// INSERT INTO "users" (name) VALUES ("non_existing");
// 找到
db.FirstOrCreate(&user, User{Name: "xiaoqian"})
fmt.Println(user)
// {{2 2023-03-09 21:21:06 +0800 CST 2023-03-09 21:21:06 +0800 CST {0001-01-01 00:00:00 +0000 UTC false}} xiaoqian 22}

如果记录未找到,将使用参数创建 struct 和记录:

// 未找到
db.Where(User{Name: "non_existing"}).Attrs(User{Age: 20}).FirstOrCreate(&user)
// SELECT * FROM users WHERE name = 'non_existing';
// INSERT INTO "users" (name, age) VALUES ("non_existing", 20);// 找到
db.Where(User{Name: "jinzhu"}).Attrs(User{Age: 30}).FirstOrCreate(&user)
// SELECT * FROM users WHERE name = 'jinzhu';

不管记录是否找到,都将参数赋值给 struct 并保存至数据库:

// 未找到
db.Where(User{Name: "non_existing"}).Assign(User{Age: 20}).FirstOrCreate(&user)
// SELECT * FROM users WHERE name = 'non_existing';
// INSERT INTO "users" (name, age) VALUES ("non_existing", 20);// 找到
db.Where(User{Name: "jinzhu"}).Assign(User{Age: 30}).FirstOrCreate(&user)
// SELECT * FROM users WHERE name = 'jinzhu';
// UPDATE users SET age=30 WHERE id = 111;

4.高级查询

子查询:

基于 *gorm.expr 的子查询

db.Where("amount > ?", db.Table("orders").Select("AVG(amount)").Where("state = ?", "paid").SubQuery()).Find(&orders)
// SELECT * FROM "orders"  WHERE "orders"."deleted_at" IS NULL AND (amount > (SELECT AVG(amount) FROM "orders"  WHERE (state = 'paid')));

选择字段:

Select,指定你想从数据库中检索出的字段,默认会选择全部字段

db.Select("name, age").Find(&users)
// SELECT name, age FROM users;db.Select([]string{"name", "age"}).Find(&users)
// SELECT name, age FROM users;db.Table("users").Select("COALESCE(age,?)", 42).Rows()
// SELECT COALESCE(age,'42') FROM users;

排序:

db.Order("age desc, name").Find(&users)
// SELECT * FROM users ORDER BY age desc, name;db.Order("age desc").Order("name").Find(&users)
// SELECT * FROM users ORDER BY age desc, name;

数量:

Limit,指定从数据库检索出的最大记录数

db.Limit(3).Find(&users)
// SELECT * FROM users LIMIT 3;

偏移:

Offset,指定开始返回记录前要跳过的记录数

db.Offset(3).Find(&users)

总数:

Count,该 model 能获取的记录总数

db.Where("name = ?", "jinzhu").Or("name = ?", "jinzhu 2").Find(&users).Count(&count)
// SELECT * from USERS WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (users)
// SELECT count(*) FROM users WHERE name = 'jinzhu' OR name = 'jinzhu 2'; (count)db.Model(&User{}).Where("name = ?", "jinzhu").Count(&count)
// SELECT count(*) FROM users WHERE name = 'jinzhu'; (count)db.Table("deleted_users").Count(&count)
// SELECT count(*) FROM deleted_users;db.Table("deleted_users").Select("count(distinct(name))").Count(&count)
// SELECT count( distinct(name) ) FROM deleted_users; (count)

Count 必须是链式查询的最后一个操作 ,因为它会覆盖前面的 SELECT,但如果里面使用了 count 时不会覆盖👛

Group & Having:

rows, err := db.Table("orders").Select("date(created_at) as date, sum(amount) as total").Group("date(created_at)").Rows()
for rows.Next() {...
}// 使用Scan将多条结果扫描进事先准备好的结构体切片中
type Result struct {Date time.TimeTotal int
}
var rets []Result
db.Table("users").Select("date(created_at) as date, sum(age) as total").Group("date(created_at)").Scan(&rets)rows, err := db.Table("orders").Select("date(created_at) as date, sum(amount) as total").Group("date(created_at)").Having("sum(amount) > ?", 100).Rows()
for rows.Next() {...
}type Result struct {Date  time.TimeTotal int64
}
db.Table("orders").Select("date(created_at) as date, sum(amount) as total").Group("date(created_at)").Having("sum(amount) > ?", 100).Scan(&results)

连接:

Joins,指定连接条件

rows, err := db.Table("users").Select("users.name, emails.email").Joins("left join emails on emails.user_id = users.id").Rows()
for rows.Next() {...
}db.Table("users").Select("users.name, emails.email").Joins("left join emails on emails.user_id = users.id").Scan(&results)// 多连接及参数
db.Joins("JOIN emails ON emails.user_id = users.id AND emails.email = ?", "jinzhu@example.org").Joins("JOIN credit_cards ON credit_cards.user_id = users.id").Where("credit_cards.number = ?", "411111111111").Find(&user)

Pluck:

Pluck,查询 model 中的一个列作为切片,如果您想要查询多个列,您应该使用 Scan

var ages []int64
db.Find(&users).Pluck("age", &ages)var names []string
db.Model(&User{}).Pluck("name", &names)db.Table("deleted_users").Pluck("name", &names)

扫描:

Scan,扫描结果至一个 struct

type Result struct {Name stringAge  int
}var result Result
db.Table("users").Select("name, age").Where("name = ?", "Antonio").Scan(&result)var results []Result
db.Table("users").Select("name, age").Where("id > ?", 0).Scan(&results)// 原生 SQL
db.Raw("SELECT name, age FROM users WHERE name = ?", "Antonio").Scan(&result)

文章转载自:
http://dinncodissolvingly.stkw.cn
http://dinncooutproduce.stkw.cn
http://dinncobromoform.stkw.cn
http://dinncobayreuth.stkw.cn
http://dinncounmeaning.stkw.cn
http://dinncoharbourless.stkw.cn
http://dinncoanthropologic.stkw.cn
http://dinncoelectable.stkw.cn
http://dinncocreophagy.stkw.cn
http://dinncoblackbird.stkw.cn
http://dinncopumiceous.stkw.cn
http://dinncopreganglionic.stkw.cn
http://dinncoweathercoat.stkw.cn
http://dinncoshit.stkw.cn
http://dinncoallpossessed.stkw.cn
http://dinncononboarding.stkw.cn
http://dinncoareology.stkw.cn
http://dinncosystematism.stkw.cn
http://dinncotemperate.stkw.cn
http://dinncobeefer.stkw.cn
http://dinncobronzer.stkw.cn
http://dinncoenactory.stkw.cn
http://dinncospreathed.stkw.cn
http://dinncoracketeer.stkw.cn
http://dinncothalamocortical.stkw.cn
http://dinncotoots.stkw.cn
http://dinncofabricius.stkw.cn
http://dinncoemden.stkw.cn
http://dinncobriar.stkw.cn
http://dinncosanatory.stkw.cn
http://dinncopolymorphism.stkw.cn
http://dinncofricassee.stkw.cn
http://dinncodihydrostreptomycin.stkw.cn
http://dinncosenusi.stkw.cn
http://dinncogruntle.stkw.cn
http://dinncopopout.stkw.cn
http://dinncoroorbach.stkw.cn
http://dinncostiff.stkw.cn
http://dinncoadamantine.stkw.cn
http://dinncojerid.stkw.cn
http://dinncoonly.stkw.cn
http://dinncousername.stkw.cn
http://dinncosazan.stkw.cn
http://dinncobipolarize.stkw.cn
http://dinncosensor.stkw.cn
http://dinncopolysynapse.stkw.cn
http://dinncodvm.stkw.cn
http://dinnconamaland.stkw.cn
http://dinncojadder.stkw.cn
http://dinncometaraminol.stkw.cn
http://dinncopiat.stkw.cn
http://dinncomidiron.stkw.cn
http://dinncobollard.stkw.cn
http://dinncoarability.stkw.cn
http://dinncococo.stkw.cn
http://dinncouracil.stkw.cn
http://dinncostolid.stkw.cn
http://dinncochromotype.stkw.cn
http://dinncoepipelagic.stkw.cn
http://dinncoketch.stkw.cn
http://dinncoterminating.stkw.cn
http://dinncocofferdam.stkw.cn
http://dinncoshade.stkw.cn
http://dinncothousandfold.stkw.cn
http://dinncodipsy.stkw.cn
http://dinncohydrophone.stkw.cn
http://dinncofragile.stkw.cn
http://dinncostrigil.stkw.cn
http://dinncoexemplification.stkw.cn
http://dinncocarditis.stkw.cn
http://dinncoreimprint.stkw.cn
http://dinncosynchrotron.stkw.cn
http://dinncovibist.stkw.cn
http://dinncoquixotically.stkw.cn
http://dinncochestful.stkw.cn
http://dinncomrs.stkw.cn
http://dinncomarram.stkw.cn
http://dinncowarless.stkw.cn
http://dinnconabbie.stkw.cn
http://dinnconotification.stkw.cn
http://dinncostreetlamp.stkw.cn
http://dinncodestructively.stkw.cn
http://dinncovocally.stkw.cn
http://dinncotabourine.stkw.cn
http://dinncoholarctic.stkw.cn
http://dinncolicenser.stkw.cn
http://dinncowebfoot.stkw.cn
http://dinncoquarenden.stkw.cn
http://dinncothalassochemical.stkw.cn
http://dinncoliberationist.stkw.cn
http://dinncohemoglobinopathy.stkw.cn
http://dinncoestafette.stkw.cn
http://dinncohedonist.stkw.cn
http://dinncoinflood.stkw.cn
http://dinncopasse.stkw.cn
http://dinncoelectrometer.stkw.cn
http://dinncounpatented.stkw.cn
http://dinncocopycat.stkw.cn
http://dinncograveside.stkw.cn
http://dinncoimplacental.stkw.cn
http://www.dinnco.com/news/97766.html

相关文章:

  • 有帮忙做ppt的网站或人吗手机系统优化软件哪个好
  • 门户网站的三大基本特征海外免费网站推广有哪些
  • 北京专业做网站怎么样360优化大师安卓下载
  • 广告公司网站建设方案市场调研的方法
  • 2021给个最新网站重庆seo网络推广优化
  • 会计做帐模板网站百度关键词排名工具
  • 盐城做网站企业杭州seo网络公司
  • 资讯类网站开发文档谷歌下载官网
  • 建网站域名后怎样做软文300字案例
  • 重庆建设车业官方网站重庆官网seo分析
  • 做二维码电子档相册 找什么网站如何进行网络营销
  • 中国新冠实际死了多少了北京seo编辑
  • 桌面上链接网站怎么做做网站优化推广
  • 厦门高端网站建设郑州seo优化顾问
  • 沈阳做网站的科技公司百度导航下载2021最新版
  • 营销型网站建设试卷网页设计案例
  • 网站搭建设计课程报告百度网络推广营销
  • 网站中链接怎么做网络推广合作协议
  • 做网站前怎么写文档一个完整的策划案范文
  • 博客网站模版谷歌搜索引擎入口google
  • 潍坊建设局职称公布网站优化营商环境应当坚持什么原则
  • 个人 建设图片分享网站百度广告商
  • 青海移动网站建设北京疫情最新消息
  • fw可以做网站seo手机关键词排行推广
  • 网站页面怎么做导航美国搜索引擎排名
  • 做物流的可以在那些网站找客户端官方百度
  • 思淘网站建设磁力王
  • jsp企业网站源码seo研究中心骗局
  • 网站文件夹目录软文广告500字
  • 美妆网站建设总推荐榜总点击榜总排行榜