正确的写法:
qs, user,users := db.DB(), new(db.User),new([]db.User)
var count int
if nil != listReq.Start && nil != listReq.End {
qs = qs.Where("created_at BETWEEN ? AND ?", listReq.Start, listReq.End)
}
err := qs.Table("user").Count(&count).Error
if err != nil {
return nil, err
}
if 0 != listReq.PageSize && 0 != listReq.PageNumber {
qs = qs.Model(&user).Offset((listReq.PageNumber - 1) * listReq.PageSize).Limit(listReq.PageSize)
}
if err := qs.Order("created_at desc").Find(&users).Error; err != nil {
return nil, err
}
上面只展示了关键的代码,能说明问题即可。
要点是,count的查询必须写在分页之前,可以写在其余查询逻辑之后。
- 如果写在分页之后,第一页不会报错,但是从第二页开始就会报错
sql: no rows in result set
- 如果count写的太靠前了,就没办法顾及到其他必要的查询条件。
网友评论