首页 > 解决方案 > 如何计算查询中的行数?

问题描述

我有一个问题如何计算查询中的行数。如下例

rows, err := repo.DBConn.Query("SELECT init_id, email, address,  phone, name, zipcode , about,backgroundimg_url,icon_url FROM public.initiator where init_id in (select init_id from public.events where request_id=$1)",request_id)

标签: postgresqlgo

解决方案


如果您不关心行的实际内容,请使用选择计数查询。

var count int
row := repo.DBConn.QueryRow("SELECT COUNT(*) FROM public.initiator where init_id in (select init_id from public.events where request_id=$1)",request_id)
if err := row.Scan(&count); err != nil {
    return err
}

如果您关心内容,则将行扫描成一个切片,然后使用该len函数获取其长度。

rows, err := repo.DBConn.Query(`SELECT init_id, email, address,  phone, name, zipcode , about,backgroundimg_url,icon_url FROM public.initiator where init_id in (select init_id from public.events where request_id=$1)",request_id`)
if err != nil {
    return err
}
defer rows.Close()

var inits []*Initiator
for rows.Next() {
    ini := new(Initiator)
    if err := rows.Scan(&ini.InitID, &ini.Email, ...); err != nil {
        return err
    }
    inits = append(inits, ini)
}
if err := rows.Err(); err != nil {
    return err
}

count := len(inits)

如果您正在进行分页,而您想要的只是每个请求 20 行,但您还想要满足 WHERE 子句的总行数,那么您需要执行两个查询,即检索 20 行的查询和一个计算总行数的。你可以结合上面的例子来做到这一点。


推荐阅读