我有一个问题,如何计算查询中的行数。如下例所示
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)
答案 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行,第一个用于计算总行数。您可以结合以上示例来做到这一点。