为了账号安全,请及时绑定邮箱和手机立即绑定

后gresql + 带有组的 gorm 复杂分页

后gresql + 带有组的 gorm 复杂分页

肥皂起泡泡 2022-09-12 16:41:03
我有带有GroupId列的表,并且可能有大量的行。有没有办法按组对数据进行分页?例如,获得前10组,然后是接下来的10组等?表将具有此结构(默认情况下不排序) - 抱歉格式不正确,由于某种原因它不起作用,但我认为它是可见的科尔1科尔2组标识数据 A傅11数据 B福21数据 C傅32...那么有没有办法有效地获得拳头10组的行,然后是接下来的10组等,每组的行数不是固定的?假设有数百万行,组可以是任意数字。
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

它并没有真正分页,而只是通过有界标识符()查询数据。如果您知道组 ID,并且它们是连续的,则可以执行类似操作。这是使用纯Go完成的,您可以轻松地将gorm与此合并。GroupId

去游乐场

package main


import (

    "fmt"

)


func main() {

    for _, q := range queries() {

        fmt.Println(q)

    }

}


func queries() (out []string) {

    groups := []int{10, 20, 30, 40, 50, 60, 70, 80, 90, 100}

    for i := 0; i < len(groups); i++ {

        var lower, upper int = 0, 0

        if i != 0 {

            lower = groups[i-1]

        }

        upper = groups[i]

        q := fmt.Sprintf("SELECT * FROM MyTable WHERE GroupId >= %v AND GroupId < %v", lower, upper)

        out = append(out, q)

    }

    return

}

对打印出应运行以获取每个组中的所有结果的每个查询的调用。例如:queries


SELECT * FROM MyTable WHERE GroupId >= 0 AND GroupId < 10

SELECT * FROM MyTable WHERE GroupId >= 10 AND GroupId < 20

SELECT * FROM MyTable WHERE GroupId >= 20 AND GroupId < 30

SELECT * FROM MyTable WHERE GroupId >= 30 AND GroupId < 40

SELECT * FROM MyTable WHERE GroupId >= 40 AND GroupId < 50

SELECT * FROM MyTable WHERE GroupId >= 50 AND GroupId < 60

SELECT * FROM MyTable WHERE GroupId >= 60 AND GroupId < 70

SELECT * FROM MyTable WHERE GroupId >= 70 AND GroupId < 80

SELECT * FROM MyTable WHERE GroupId >= 80 AND GroupId < 90

SELECT * FROM MyTable WHERE GroupId >= 90 AND GroupId < 100

到目前为止,我们假设您已经确切地知道要查询的“组存储桶”。相反,如果我们假设我们知道有多少个顺序组()以及每个查询想要多少个组(存储桶大小),我们可以轻松创建一个函数来为我们提供应该查询的存储桶。ns


func groups(n, s int) (out []int) {

    for i := 0; i <= n; i++ {

        if i == 0 {

            continue

        }

        if i%s == 0 || i == n {

            out = append(out, i)

        }

    }

    return

}


查看完整回答
反对 回复 2022-09-12
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信