如何计算查询中的行数?

时间:2019-09-12 13:16:03

标签: postgresql go

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

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)

1 个答案:

答案 0 :(得分:0)

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

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行,第一个用于计算总行数。您可以结合以上示例来做到这一点。